我编写了一个python函数,用于根据客户的上一封邮件和当前邮件的日期之间的差异来检查邮件是重复邮件还是新鲜邮件。
'Days_Difference'包含0、15等数字值以及'None'
函数定义如下:
def Status(df['Days_Difference']):
if(df['Days_Difference'] < 30):
return 'repeat'
elif(df['Days_Difference'] > 30):
return 'fresh'
else:
return 'not in list'
我遇到错误:
在'str'和'int'类型之间不支持'<'
我尝试了df['Days_Difference'] = int(df['Days_Difference'])
,但没有成功。
我也尝试了df['Days_Difference'] = pd.numeric(df['Days_Difference'])
,但也没有成功。
我正在寻找解决方案!
答案 0 :(得分:1)
(我假设df
是熊猫数据框)
您自己发现了问题。
您说df['a']
包含整数和'None'
。 'None'
是一个字符串,因此无法与整数进行比较。这很容易重现:
df = pd.DataFrame({'a': [1, 'None', 3, 4, 5]})
if df['a'] < 3:
pass
TypeError: '<' not supported between instances of 'str' and 'int'
还有另一个问题。即使df['a']
仅包含整数,该代码也不起作用:
df = pd.DataFrame({'a': [1, 2, 3, 4, 5]})
if df['a'] < 3:
pass
ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
这是因为df['a'] < 3
返回索引的掩码,其中a
中的值满足条件< 3
:
print((df['a'] < 3).tolist())
# [True, True, False, False, False]
对此调用bool
(实际上是if
的意思)没有任何意义。 [True, True, False, False, False]
是真的吗?这是假的吗?就像错误所说的那样,它是模棱两可的。
您需要重新考虑此函数的逻辑以及您实际希望它在什么条件下返回的内容。