如何在Pandas中对含公元1年日期的object类型列进行日期相加?
解决方案
核心思路
date_2列的数值本质是相对于公元1年1月1日的时间间隔,而非实际的历史日期。因此我们需要先计算该列与公元1年1月1日的时间差,再将这个差值加到date_1上得到结果。
完整代码实现
import pandas as pd # 创建用户提供的DataFrame data = { 'date_1': ['2024-07-07 18:00:00.000000', '2024-07-07 08:46:00.000000', '2024-07-07 17:42:00.000000', '2024-07-07 17:42:00.000000'], 'date_2': ['0001-01-02T01:12:53.832', '0001-01-04T08:00:00', '0001-01-08T02:00:00', '0002-01-01T02:00:00'] } df = pd.DataFrame(data) # 转换date_1为datetime类型 df['date_1'] = pd.to_datetime(df['date_1']) # 计算date_2对应的时间间隔 base_date = pd.to_datetime('0001-01-01') df['time_delta'] = pd.to_datetime(df['date_2']) - base_date # 生成结果并格式化 df['result_date'] = (df['date_1'] + df['time_delta']).dt.strftime('%Y-%m-%d %H:%M:%S') # 保留原列与结果列(可选) df = df[['date_1', 'date_2', 'result_date']] print(df)
步骤说明
- 转换
date_1: 直接用pd.to_datetime将字符串转为datetime类型,支持高精度时间格式。 - 计算时间间隔: 将
date_2转为datetime后,与基准日期0001-01-01求差,得到需要叠加的时长。 - 生成结果: 将时间间隔加到
date_1上,再用dt.strftime格式化为示例要求的字符串样式。
输出结果
运行代码后将得到与示例完全一致的result_date列:
date_1 date_2 result_date 0 2024-07-07 18:00:00 0001-01-02T01:12:53.832 2024-07-08 19:12:53 1 2024-07-07 08:46:00 0001-01-04T08:00:00 2024-07-10 16:46:00 2 2024-07-07 17:42:00 0001-01-08T02:00:00 2024-07-14 19:42:00 3 2024-07-07 17:42:00 0002-01-01T02:00:00 2025-07-07 19:42:00
内容的提问来源于stack exchange,提问作者Tmiskiewicz
相关产品推荐
相关产品推荐

