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

如何在Python Pandas DataFrame中筛选int值转换UNIX/EPOCH时间

解决混合格式日期列的转换问题

问题分析

你的END DATE列混合了三种类型值:日期字符串(如'2023-12-31')、字符串形式的纳秒级Unix时间戳(如'1698710400000000000')、空值。直接全局调用pd.to_datetime会因格式冲突报错,需要仅针对Unix时间戳格式的条目进行转换。

注意:你的构造数据中,Unix时间戳是以字符串形式存储的,不是int类型,所以原筛选条件isinstance(x, int)无法命中目标行,需要调整筛选逻辑。

解决方案

方法1:精准筛选数字字符串并转换

先筛选出END DATE列中是纯数字字符串的行,再对这些行执行Unix时间戳转换:

# 筛选纯数字字符串的行,空值排除在外
mask = df["END DATE"].str.match(r'^\d+$', na=False)
# 仅对符合条件的行转换,指定纳秒单位
df.loc[mask, "END DATE"] = pd.to_datetime(df.loc[mask, "END DATE"], unit='ns')
# 可选:统一整列为datetime类型,保留原有有效日期和空值
df["END DATE"] = pd.to_datetime(df["END DATE"], errors='ignore')

方法2:批量尝试转换,自动兼容多格式

如果不确定格式,可通过两次转换合并结果,自动识别有效格式:

# 先尝试转换所有值为纳秒级Unix时间戳,转换失败的返回NaT
unix_converted = pd.to_datetime(df["END DATE"], unit='ns', errors='coerce')
# 用原日期字符串的转换结果填充NaT,自动识别常规日期格式
df["END DATE"] = unix_converted.combine_first(pd.to_datetime(df["END DATE"], errors='coerce'))

最终效果

执行后END DATE列的结果:

END DATE
2023-12-31 00:00:00
2023-12-31 00:00:00
2023-10-31 00:00:00
NaT
NaT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:10:18