pandas读取CSV转字符串日期为datetime去时间及内核重启类型回退问题
问题诱因
- 自定义日期解析函数存在大小写语法错误:你定义的
parse_dt函数入参是小写x,但列表推导式中遍历的是大写X。之前运行时能成功,是因为你此前的运行环境中存在全局变量X存储了日期列的值,重启内核后全局变量清空,函数运行报错,pd.read_csv遇到日期解析失败会自动回退为直接读取原始字符串,因此列类型变回object。 - 自定义解析逻辑冗余且容错性差:你在解析后将值转为了Python原生
date对象,该对象在Pandas中存储时本身就会被识别为object类型,仅当你直接返回datetime对象时Pandas才会自动转为datetime64[ns]类型,逻辑冲突也会导致解析不稳定。
彻底解决方法
不需要自定义解析函数,直接使用Pandas自带的date_format参数完成解析,稳定性和效率远高于自定义函数,且不会出现类型回退问题:
首先导入必要依赖:
import pandas as pd
然后读取CSV并处理日期列:
# parse_dates参数填入你实际的日期列名,如你之前用的'Date Column' df = pd.read_csv(r'DataFile.csv', parse_dates=['Date'], date_format='%d%b%Y %H:%M:%S') # 去除时间部分,仅保留日期,且保持datetime64[ns]类型不变 df['Date'] = df['Date'].dt.floor('D')
如果确实需要将日期列转为Python原生date对象(该场景下列类型本身就是object,属于正常情况),可以用以下代码:
df['Date'] = df['Date'].dt.date
完成后调用df.info()即可确认日期列类型,重启内核后重新运行也不会出现类型回退问题。
内容的提问来源于stack exchange,提问作者Amgad Nassif
相关产品推荐
相关产品推荐

