如何在Pandas中将整数转换为以天为单位的timedelta类型
问题原因
你原有代码中astype('timedelta64[ns]')指定了时间差的单位为纳秒,输入的整数值会被识别为纳秒数,因此只会体现在时间的纳秒位,天数始终为0。
解决方案
方案1:生成标准timedelta类型(时间部分为0,匹配第二种期望输出)
可以直接修改timedelta的单位为天,两种写法均可:
写法1:调整astype的单位参数
df['Date_Numerical_Delta'] = df['Date_Numerical'].astype('timedelta64[D]')
写法2:用pandas自带的to_timedelta方法,可读性更高
import pandas as pd df['Date_Numerical_Delta'] = pd.to_timedelta(df['Date_Numerical'], unit='D')
输出的Date_Numerical_Delta字段为原生timedelta类型,可直接用于后续时间差计算,展示时会显示为5 days 00:00:00格式。
方案2:生成仅显示天数的字符串格式(匹配第一种期望输出)
如果只需要展示纯天数的字符串格式,可在方案1的基础上做二次处理:
df['Date_Numerical_Delta'] = df['Date_Numerical'].astype('timedelta64[D]').dt.days.astype(str) + ' days'
注意:如果后续需要对时间差字段做算术运算、时间偏移等操作,推荐保留原生timedelta类型,不要转成字符串,避免额外的类型转换开销。
内容的提问来源于stack exchange,提问作者Deke Marquardt
相关产品推荐
相关产品推荐

