【问题标题】:Email Repeats Classification: Python function and conditional statement error电子邮件重复分类:Python 函数和条件语句错误
【发布时间】:2018-12-11 09:20:57
【问题描述】:

我编写了一个 python 函数,根据客户上次邮件和当前邮件的日期差异来检查邮件是重复邮件还是新邮件。

“Days_Difference”包含数字值,例如 0、15 以及“无”

函数定义如下:

def Status(df['Days_Difference']):
    if(df['Days_Difference'] < 30):
         return 'repeat'
    elif(df['Days_Difference'] > 30):
         return 'fresh'
    else:
         return 'not in list'

我收到错误:

'

我尝试了df['Days_Difference'] = int(df['Days_Difference']),但没有成功。

我也尝试过df['Days_Difference'] = pd.numeric(df['Days_Difference']),但也没有成功。

我正在寻找解决方案!

【问题讨论】:

    标签: python function


    【解决方案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'] &lt; 3 返回一个索引掩码,其中a 中的值满足&lt; 3 条件:

    print((df['a'] < 3).tolist())
    
    # [True, True, False, False, False]
    

    为此调用bool(这是if 本质上所做的)没有任何意义。 [True, True, False, False, False] 是真的吗?是假的吗?就像错误所说的那样模棱两可。

    你需要重新考虑这个函数的逻辑以及你真正希望它在什么条件下返回。

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 2023-03-28
      • 2019-05-27
      • 2011-05-24
      相关资源
      最近更新 更多