pd.read_csv读取CSV时仅解析两日期列中一列的问题求助
问题:CSV读取时仅部分日期列被解析为datetime类型
现象
从CSV读取数据并指定解析日期列时,两个格式完全一致的日期列中,仅一列被转换为datetime类型,另一列仍保持object类型。
所用代码
dtype = {'col1':'category','col2':'category','Start Date':'str','End Date':'str'} dates = ['col3','col4'] df = pd.read_csv(filepath,dtype=dtype,parse_dates=dates,dayfirst=False)
已尝试方案(均无效)
- 调整
dayfirst参数 - 使用格式化器
更新说明
创建最小可复现数据集时,两列日期均能正常被解析为datetime类型,测试代码如下:
import pandas as pd df = pd.DataFrame({'col1':['ABC','ABC','DCF','DCF'], 'Start Date':['12-31-2022','12-31-2022','12-31-2022','12-31-2022'], 'End Date':['12-31-2023','12-31-2023','12-31-2023','12-31-2023'] }) df.to_csv('test.csv',index=0) df2 = pd.read_csv('test.csv', dtype={'col1':'category','Start Date':'str','End Date':'str'}, parse_dates = ['Start Date','End Date'], dayfirst=False ) df2.info()
排查与解决建议
- 检查原始CSV数据
确认未被解析的日期列是否存在脏数据,比如空值、格式不符的字符串、不可见字符等。可通过以下代码查看该列的所有唯一值:
print(df['col4'].unique())
- 移除日期列的dtype强制指定
你在dtype中强制将日期列设为str,可能与parse_dates的解析逻辑冲突。尝试修改dtype配置:
dtype = {'col1':'category','col2':'category'} dates = ['col3','col4'] df = pd.read_csv(filepath,dtype=dtype,parse_dates=dates,dayfirst=False)
- 手动转换并定位错误
若自动解析失败,读取后手动转换日期列,并通过errors='coerce'标记转换失败的行:
df['col4'] = pd.to_datetime(df['col4'], dayfirst=False, errors='coerce') # 查看转换失败的行 print(df[df['col4'].isna()])
内容的提问来源于stack exchange,提问作者Gian Flavio Violi Bravo
相关产品推荐
相关产品推荐

