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

如何将DataFrame日期列从object转为int64且保留原值

解决日期字符串转int64的正确方法

你遇到的问题很典型——直接把object类型的日期字符串转成int完全行不通,因为pandas不会把带/的字符串当成日期解析,要么会报错,要么(如果有隐式转换的情况)会输出完全不符合预期的大数值(比如纳秒级时间戳)。下面给你两种实用的解决方案,根据你的需求选就行:

方案一:转成时间戳整数(以天为单位)

这种方式会把日期转换成从1970年1月1日(Unix纪元)到目标日期的天数,是一种常用的日期数值化方式:

  1. 先把字符串日期解析成datetime类型:
import pandas as pd
df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y')

这里的format='%m/%d/%Y'是明确告诉pandas你的日期格式是月/日/年,避免解析出错。
2. 再转换成以天为单位的int64:

# 把datetime转成纳秒时间戳后,除以一天的纳秒数得到天数
df['date_int'] = df['date'].astype('int64') // (10**9 * 86400)

或者更直观的写法:

df['date_int'] = df['date'].dt.floor('D').sub(pd.Timestamp("1970-01-01")).dt.days.astype('int64')

方案二:转成年月日拼接的整数(如20230106)

如果需要更直观的数值,比如把1/6/2023转成20230106这种格式,可以这么做:

  1. 同样先解析成datetime类型:
df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y')
  1. 格式化字符串后转成int64:
df['date_int'] = df['date'].dt.strftime('%Y%m%d').astype('int64')

这种方式得到的整数可读性更强,适合需要直接看年月日的场景。

注意事项

  • 一定要先把object类型的日期字符串转成datetime类型,这是正确转换的前提,直接转int是完全错误的逻辑。
  • 如果你的日期数据里有格式不规范的条目,pd.to_datetime可能会报错,可以加上errors='coerce'参数把无效值转成NaT,后续再处理:
df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:25:14