You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:54:38