Pandas转Datetime为%m/%d/%Y格式时.dt访问器报错如何解决
问题根因
核心问题出在pd.to_datetime的参数使用上:errors='ignore'的逻辑不是“跳过无法解析的坏值、转换能解析的正常值”,而是只要列中存在任意一个无法按规则解析为时间类型的值,整列转换操作会直接终止,返回原始的object类型数据,不会做任何类型转换。
你看到的2017-11-10 00:00:00这类值本质是字符串,不是Pandas认可的datetime64类型,因此调用.dt访问器时会触发类型错误。
解决步骤
- 第一步:正确完成日期类型转换,将
errors='ignore'替换为errors='coerce',把无法解析的异常值统一标记为NaT(时间类型缺失值)。
如果列内原始值是Unix秒级时间戳,使用以下代码:df6['beginn'] = pd.to_datetime(df6['beginn'], unit='s', errors='coerce')
转换完成后可以执行注意:如果列内原始值本身就是
2017-11-10 00:00:00格式的日期字符串,不是秒级时间戳,必须去掉unit='s'参数,否则会解析出完全错误的时间,对应代码为:df6['beginn'] = pd.to_datetime(df6['beginn'], errors='coerce')print(df6['beginn'].dtype)确认输出为datetime64[ns],如果需要定位转换失败的异常条目,可以执行:
对异常值做手动修正或者直接保留为缺失值即可。print(df6[df6['beginn'].isna()]) - 第二步:确认列类型为datetime类型后,执行格式化代码,即可得到
%m/%d/%Y格式的日期:df6['beginn'] = df6['beginn'].dt.strftime('%m/%d/%Y')
内容的提问来源于stack exchange,提问作者Anthony Admin
相关产品推荐
相关产品推荐

