【问题标题】:Pandas - TypeError: unsupported operand type(s) for +: 'float' and 'str'Pandas - TypeError:+:'float'和'str'不支持的操作数类型
【发布时间】:2021-12-21 01:10:49
【问题描述】:

我有一个函数:generateID,但我对这一行有疑问:

data_df['id_cont'] = data_df.apply(lambda row:row['product_name']+'-'+row['hour_shift'].strftime('%Y-%m-%d %H:%M:%S'),axis=1)

由于这个数据转换问题,我有这个错误:

TypeError: +: 'float' 和 'str' 的操作数类型不受支持

这是我的代码:

 def generateID(self,outputMode,data_df):
    
    data_df = self._preGenerateID(outputMode,data_df)
    
    if outputMode.getModeCB() == CONST_MODE_CONT:
        data_df['id_cont'] = data_df.apply(lambda row:row['equipement']+'-'+row['product_name']+'-'+row['hour_shift'].strftime('%Y-%m-%d %H:%M:%S'),axis=1)
   
    else:
        data_df['first_date'] = data_df.groupby(['equipement'])['local_time'].transform('min')
        data_df['year'] = pd.DatetimeIndex(data_df['first_date']).year
        data_df['year'] = data_df['year'].astype(str)

        data_df['id_batch'] = data_df.apply(lambda row:row['equipement']+'-'+row['product_name']+'-'+row['year'],axis=1)
 
    return data_df

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您的其中一个列是float,我假设您想将它们连接为str 为strftime。您可以尝试f-strings,或者在连接之前将您的列转换为str。

    f-string 示例:

    data_df['id_cont'] = pd.to_datetime(df.apply(
              lambda row:f"{row['equipement']}-{row['product_name']}-{row['hour_shift']}",axis=1)) 
    

    【讨论】:

    • 感谢您的回答,我尝试了您的解决方案,但出现此错误:AttributeError: 'str' object has no attribute 'strftime'。我会将我的字段hour_shift 转换为str。
    • 哦,等等,你想创建一个datetime 对象,对吧?您需要改用strptime。还是您想更改str 的格式?通常,如果您不明确需要其他格式的列,最好保持原样。
    • 我想做一个日期时间对象,我会用strptime。
    • 我已更新我的答案以适合您的解决方案
    • 回复晚了抱歉,非常感谢您的帮助!
    猜你喜欢
    • 2019-01-27
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多