如何将DataFrame日期列从object转为int64且保留原值
解决日期字符串转int64的正确方法
你遇到的问题很典型——直接把object类型的日期字符串转成int完全行不通,因为pandas不会把带/的字符串当成日期解析,要么会报错,要么(如果有隐式转换的情况)会输出完全不符合预期的大数值(比如纳秒级时间戳)。下面给你两种实用的解决方案,根据你的需求选就行:
方案一:转成时间戳整数(以天为单位)
这种方式会把日期转换成从1970年1月1日(Unix纪元)到目标日期的天数,是一种常用的日期数值化方式:
- 先把字符串日期解析成
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这种格式,可以这么做:
- 同样先解析成
datetime类型:
df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y')
- 格式化字符串后转成
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
相关产品推荐
相关产品推荐

