为何出现TypeError:datetime64[ns]无法转换为timedelta64[ns]?
报错原因与解决方法
报错原因
pd.to_timedelta()的作用是转换时间间隔类数据(比如字符串"5 days"、数值型小时数等)为timedelta类型,但你传入的是已转为datetime64[ns]的具体日期值——这类数据是时间点而非时间间隔,直接转换会触发类型不兼容的TypeError。
解决方法
将日期转为天数的核心是计算日期与某个基准日期的时间差,再提取天数。以下是两种常用实现:
方式1:以数据中的最小日期为基准(计算相对天数)
import pandas as pd # 先将日期列转为datetime类型,无效值转为NaT df['dates'] = pd.to_datetime(df['dates'], errors='coerce') # 计算每个日期与数据中最早日期的差值,提取天数 df['relative_days'] = (df['dates'] - df['dates'].min()).dt.days
方式2:以固定基准日期为基准(比如Unix纪元1970-01-01)
import pandas as pd df['dates'] = pd.to_datetime(df['dates'], errors='coerce') # 定义固定基准日期 base_date = pd.to_datetime('1970-01-01') # 计算每个日期与基准日的天数差 df['days_since_epoch'] = (df['dates'] - base_date).dt.days
补充说明
由于使用了errors='coerce',无效的日期字符串会被转为NaT(Not a Time),对应的天数结果为NaN,可根据业务需求用fillna()等方法处理缺失值。
内容的提问来源于stack exchange,提问作者Mourya
相关产品推荐
相关产品推荐

