Python中将整数类型Timestamp转换为日期类型时结果均为'1970-01-01'的修正方案求助
解决整数天数转换为日期的问题
你遇到的问题很典型——你误解了pd.to_datetime里format参数的用途,导致解析全部失败,返回了默认的Unix时间原点1970-01-01。
问题根源
format='%d%b%Y'是用来告诉pandas解析特定格式的字符串日期(比如"13Jul2009"这种),但你的timestamp列是整数天数偏移量,和这个格式完全不匹配,所以解析失败后统一返回了起始日期。
正确解决方案
你需要把这些整数当作从某个起始日期开始的天数来转换,关键是要确定这个起始日期(常见的有两种情况):
情况1:从1900-01-01开始的天数(Excel/表格软件默认)
这是最常见的场景,很多表格工具会把日期存储为从1900年1月1日开始的天数:
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='D', origin='1900-01-01')
⚠️ 注意:如果是Excel导出的数据,Excel有个历史bug——错误地把1900年标记为闰年,所以你需要减去2天才能得到正确日期:
df['timestamp'] = pd.to_datetime(df['timestamp'] - 2, unit='D', origin='1900-01-01')
情况2:从1970-01-01开始的天数(Unix风格)
如果你的天数是从Unix时间原点开始计算的,直接用unit='D'即可(默认origin就是1970-01-01):
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='D')
另一种写法:用Timedelta计算
你也可以手动用起始日期加上天数差来转换,逻辑更直观:
# 替换成你的实际起始日期 start_date = pd.to_datetime('1900-01-01') df['timestamp'] = start_date + pd.to_timedelta(df['timestamp'], unit='D')
验证样本数据
用情况1的代码(假设是Excel导出,减2天),你的样本数据里40006会转换成2009-07-11,39916会转换成2009-06-12,你可以根据业务场景确认起始日期是否正确。
内容的提问来源于stack exchange,提问作者hk2
相关产品推荐
相关产品推荐

