如何去除Pandas日期差结果的'days'后缀,转为整数?
问题:Pandas日期差值列转为整数天数
在Pandas中计算两个日期列的差值后,得到的是带有'days'后缀的timedelta类型值,需要将其转为纯整数天数。
原代码示例:
data['TIMESTAMP'] = pd.to_datetime(data['TIMESTAMP'],format='%d-%b-%Y') data['EXPIRY_DT'] = pd.to_datetime(data['EXPIRY_DT'],format='%d-%b-%Y') data.sort_values(by = ['TIMESTAMP','SYMBOL','EXPIRY_DT'],inplace=True) data.reset_index(drop=True,inplace=True) data['DTE'] = data['EXPIRY_DT'] - data['TIMESTAMP'] data['DTE'].head()
当前输出:
0 6 days 1 6 days 2 6 days 3 6 days 4 6 days Name: DTE, dtype: timedelta64[ns]
解决方案
方法1:使用dt.days属性(推荐)
直接通过timedelta类型的.dt.days属性提取天数,得到整数类型结果:
data['TIMESTAMP'] = pd.to_datetime(data['TIMESTAMP'],format='%d-%b-%Y') data['EXPIRY_DT'] = pd.to_datetime(data['EXPIRY_DT'],format='%d-%b-%Y') data.sort_values(by = ['TIMESTAMP','SYMBOL','EXPIRY_DT'],inplace=True) data.reset_index(drop=True,inplace=True) # 修改差值计算行,提取天数 data['DTE'] = (data['EXPIRY_DT'] - data['TIMESTAMP']).dt.days data['DTE'].head()
输出效果:
0 6 1 6 2 6 3 6 4 6 Name: DTE, dtype: int64
方法2:处理缺失值(若存在NaT)
如果日期差值中存在NaT(无效日期),用fillna填充后转整数:
data['DTE'] = (data['EXPIRY_DT'] - data['TIMESTAMP']).dt.days.fillna(0).astype(int)
方法3:通过总秒数计算天数
通过总秒数除以一天的秒数得到天数,适合灵活转换时间单位的场景:
data['DTE'] = ((data['EXPIRY_DT'] - data['TIMESTAMP']).dt.total_seconds() / (24 * 3600)).astype(int)
内容的提问来源于stack exchange,提问作者smg_08
相关产品推荐
相关产品推荐

