使用pandas.read_csv的parse_dates参数报错:指定列缺失
问题解决:pandas.read_csv 解析日期列报错找不到指定列
报错核心原因是 pandas 无法匹配到你指定的日期列,大概率是 CSV 文件的实际列名与你定义的 date_cols 存在差异(比如隐藏空格、大小写不一致),或是表头位置不正确。以下是具体解决步骤:
1. 先确认 CSV 文件的实际列名
先跳过日期解析,读取文件并打印所有列名,排查是否和你定义的 date_cols 完全一致:
import pandas as pd df = pd.read_csv('CAMBIAMOVA', delimiter=';') print("文件实际列名:", df.columns.tolist())
如果输出的列名带有前后空格(比如 ' Data di fine '),说明需要先清理列名。
2. 清理列名后再解析日期
如果列名存在多余空格,可先读取文件并处理列名,再转换日期:
date_cols = ['Data di fine', 'Data di inizio', 'Prenotata'] # 读取文件并去除列名前后的空格 df = pd.read_csv('CAMBIAMOVA', delimiter=';') df.columns = df.columns.str.strip() # 转换日期列 df[date_cols] = df[date_cols].apply(pd.to_datetime)
也可以直接在 read_csv 中一次性处理:
date_cols = ['Data di fine', 'Data di inizio', 'Prenotata'] df = pd.read_csv( 'CAMBIAMOVA', delimiter=';', dtype={"N. di neonati": int}, parse_dates=date_cols, converters={col: lambda x: x.strip() for col in date_cols} )
3. 检查表头位置是否正确
如果 CSV 文件开头有注释行或空行,导致表头不在第一行,需要指定 skiprows 参数跳过前置行(比如表头在第二行就加 skiprows=1):
df = pd.read_csv( 'CAMBIAMOVA', delimiter=';', dtype={"N. di neonati": int}, parse_dates=date_cols, skiprows=1 )
另外,不需要在 dtype 里把日期列指定为 str,parse_dates 会自动解析符合 YYYY-MM-DD 格式的字符串,去掉该设置反而能避免类型冲突。
内容的提问来源于stack exchange,提问作者lob3l
相关产品推荐
相关产品推荐

