Pandas DataFrame混合字符串列转时间戳:处理$none值报错问题
解决办法:将含
$none的epoch列转为datetime并保留NaN 嗨,这个问题我之前也踩过类似的坑!pd.to_datetime直接处理混合了$none字符串和有效时间戳的列时,哪怕设置errors='ignore'也没法达到你想要的效果——要么报错,要么有效时间戳也没法转换。这是因为errors='ignore'的逻辑是转换失败就保留原始值,而不是把无效值转成NaN。下面给你两个亲测好用的解决方案:
方法一:精准替换$none再转换
先把列里的$none替换成pandas的缺失值标记pd.NA,再用errors='coerce'确保所有无法转换的内容(如果有的话)都变成时间类型的缺失值NaT:
import pandas as pd # 第一步:替换$none为缺失值 df['epoch_date'] = df['epoch_date'].replace('$none', pd.NA) # 第二步:转换为datetime,无效值自动转为NaT df['epoch_date'] = pd.to_datetime(df['epoch_date'], unit='ms', errors='coerce')
方法二:先转数值型再转换(更通用)
如果你的列里除了$none还有其他非数字的无效值,可以先把整列转成数值型,无法转换的内容会被统一转为NaN,再转datetime:
import pandas as pd # 第一步:转数值型,无效值转为NaN df['epoch_date'] = pd.to_numeric(df['epoch_date'], errors='coerce') # 第二步:转换为datetime,NaN自动转为NaT df['epoch_date'] = pd.to_datetime(df['epoch_date'], unit='ms')
补充说明
为什么之前用errors='ignore'会报错?因为当列里混合了字符串(比如$none)和数值型时间戳时,pd.to_datetime无法统一处理两种类型,哪怕设置errors='ignore'也会触发类型不匹配的错误。而上面两种方法都是先把列统一成可处理的类型,再进行转换,就能完美解决问题啦!
内容的提问来源于stack exchange,提问作者impossible
相关产品推荐
相关产品推荐

