如何在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
相关产品推荐
相关产品推荐

