Python中不强制转换,如何解析/格式化列中的无效日期数据?
解决方案:直接字符串切片重组
不用强制转换为datetime类型,直接对原字符串格式的日期进行切片拼接,就能保留所有数据(包括无效日期)并完成格式转换。
具体代码
# 确保列是字符串类型,避免数字切片异常 df['charge_off_date'] = df['charge_off_date'].astype(str) # 按yyyymmdd格式切片,重组为mm/dd/yyyy df['formatted_date'] = df['charge_off_date'].apply( lambda x: f"{x[4:6]}/{x[6:8]}/{x[:4]}" if len(x) == 8 else x )
说明
- 对于长度为8的字符串(不管内容是否为有效日期),直接提取对应位置的字符:
x[4:6]是月份,x[6:8]是日期,x[:4]是年份,拼接后就是目标格式。比如无效日期20230200会转为02/00/2023,完全保留原始无效信息。 - 对于长度不是8的异常值(比如空值、短字符串),直接保留原内容,不会报错。
为什么你的原方法失效?
用pd.to_datetime(..., errors='ignore')后,有效日期会转成datetime对象,但无效日期会保留原字符串。之后调用.dt.strftime时,只有datetime对象支持这个属性,字符串类型的行就会触发错误,这就是你遇到问题的原因。
内容的提问来源于stack exchange,提问作者Kevi
相关产品推荐
相关产品推荐

