如何在Python Pandas中计算DataFrame两日期列差值生成新列
问题描述
现有如下Pandas DataFrame:
col1 | col2 --------------------|-------------------- 2020-01-10 19:45:49 | 2020-01-11 00:00:00 2020-01-24 20:14:33 | 2020-01-24 00:00:00 2020-01-24 11:43:15 | 2020-01-20 00:00:00 NaN | 2020-08-14 00:00:00 ... | ...
数据类型说明:
- col1为object类型,可能包含NaN值
- col2为object类型,无NaN值
需要生成col3,展示col1与col2的日期天数差(col1 - col2),满足以下规则:
- 若col1为NaN,则col3也为NaN
- 若col2日期晚于col1,col3为负数
- 若col2日期早于col1,col3为正数
- 两日期相同时,col3为0
预期结果:
col1 | col2 | col3 --------------------|---------------------|---- 2020-01-10 19:45:49 | 2020-01-11 00:00:00 | -1 2020-01-24 20:14:33 | 2020-01-24 00:00:00 | 0 2020-01-24 11:43:15 | 2020-01-20 00:00:00 | 4 NaN | 2020-08-14 00:00:00 | NaN ... | ... | ...
解决方案
步骤1:将object类型列转换为datetime类型
当前col1和col2是字符串格式,无法直接计算日期差,需先转为Pandas的datetime类型:
import pandas as pd # 转换col1,errors='coerce'将无效值转为NaT(对应NaN) df['col1'] = pd.to_datetime(df['col1'], errors='coerce') # 转换col2(无NaN,无需处理错误) df['col2'] = pd.to_datetime(df['col2'])
步骤2:计算日期天数差生成col3
对转换后的datetime列做减法,再提取天数差:
df['col3'] = (df['col1'] - df['col2']).dt.days
该方案完全符合需求:
- col1为NaN(转换后为NaT)时,计算结果自动保留NaN
- 日期差的正负由col1与col2的先后顺序自动判定
- 即使col1包含时间部分,只要日期与col2一致,天数差即为0
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

