Pandas从现有日期时间列创建新列时出现TypeError的问题求解
问题分析与解决方案
嘿,这个问题我之前处理过,咱们来搞清楚问题出在哪以及怎么修复:
错误原因
你执行了pd.to_datetime(df['start_date'])但没有将转换后的结果重新赋值给df['start_date']!这就导致df['start_date']依然保持原来的字符串(或非datetime64)类型,而Python无法直接将字符串和datetime.timedelta对象相加,所以抛出了TypeError: coercing to Unicode: need string or buffer, datetime.timedelta found这个错误。
修复方法
有两种简单的方式可以解决这个问题:
方法一:将转换后的datetime列存回原列
这是最直接的方式,确保start_date列是Pandas能识别的datetime类型后再做时间增量运算:
import datetime import pandas as pd # 核心步骤:把转换后的datetime对象赋值回原列 df['start_date'] = pd.to_datetime(df['start_date']) # 现在就可以正常添加时间增量了 df['end_date'] = df['start_date'] + datetime.timedelta(days=10)
方法二:使用Pandas原生的pd.Timedelta
如果你更习惯用Pandas的专属工具,也可以用pd.Timedelta来替代Python标准库的datetime.timedelta,效果是一样的:
import pandas as pd df['start_date'] = pd.to_datetime(df['start_date']) df['end_date'] = df['start_date'] + pd.Timedelta(days=10)
额外提示:处理无效日期
如果你的start_date列里有格式不规范的日期字符串,可以在pd.to_datetime里加上errors='coerce'参数,把无效值转换成NaT(Not a Time),方便后续排查和处理:
df['start_date'] = pd.to_datetime(df['start_date'], errors='coerce')
内容的提问来源于stack exchange,提问作者Edamame
相关产品推荐
相关产品推荐

