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

将Int64类型天数转换为日期:基于1960年1月1日的DataFrame转换求助

解决DataFrame中天数转基准日期的问题

嘿,我来帮你搞定这个日期转换需求!你需要把DataFrame里的days列转换成以1960年1月1日为基准的实际日期,其中days=0对应这个基准日,正负数值代表距离基准日的前后天数对吧?

首先得提一句,你原来代码里直接给DataFrame添加datetime.date类型的列,没法直接和整数天数做加法运算——因为Python的date对象不支持和整数直接相加,得用pandas的时间工具来处理才高效。

下面是两种靠谱的解决方案,优先推荐第一种(向量化操作,速度快):

方法一:pandas向量化计算(推荐)

这种方法利用pandas的Timedelta和Timestamp类型,直接对整列进行运算,适合任何规模的数据集:

import pandas as pd

# 构造你的DataFrame
df = pd.DataFrame([-730,-640,-549,457,-365,275,-184,-92,0,91,182,274,366], columns=['days'])

# 设置基准日期为Timestamp类型(支持直接和Timedelta相加)
base_date = pd.Timestamp('1960-01-01')

# 将days列转换为时间差,再和基准日期相加得到实际日期
df['actual_date'] = base_date + pd.to_timedelta(df['days'], unit='D')

方法二:逐行处理(适合理解逻辑)

如果你想更直观地看到每一行的计算过程,可以用apply逐行处理,不过这种方法在大数据集上效率会低一些:

import pandas as pd
from datetime import date

# 构造DataFrame
df = pd.DataFrame([-730,-640,-549,457,-365,275,-184,-92,0,91,182,274,366], columns=['days'])

# 设置基准日期为datetime.date类型
base_date = date(1960, 1, 1)

# 对每一行的days值,计算对应的实际日期
df['actual_date'] = df['days'].apply(lambda x: base_date + pd.Timedelta(days=x))

查看结果

运行上面的代码后,你可以打印df看到转换后的结果:

print(df)

输出会类似这样(展示部分行):

days actual_date
0  -730  1958-01-01
1  -640  1958-03-22
2  -549  1958-06-21
3   457  1961-04-02
...

转换后的actual_date列是datetime64类型,完全支持pandas的各种时间序列操作,比如筛选日期、按时间分组等等。

内容的提问来源于stack exchange,提问作者Kyle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:55:50