Python pandas用parse_dates解析CSV多列日期仅生效一列如何解决?
问题根因
- 参数拼写错误:pandas
read_csv方法中指定解析日期列的参数为parse_dates(复数形式),你代码中传入的parse_date缺少末尾的s,属于无效参数,pandas只会默认识别符合内置规则的日期列,因此仅dateofbirth被转换,其余列未处理。 - 日期格式适配问题:你CSV中使用的是
月/日/年 12小时制+AM/PM的格式,部分场景下pandas默认解析规则无法匹配,即便参数拼写正确也可能出现解析失败的情况。
通用解决方案(适配多文件、日期列名不固定的场景)
下面的方案不需要提前知道每个CSV的日期列名,可自动识别转换所有符合格式的日期列:
- 方案1:读入时直接自动解析
自定义日期解析规则,读入时自动匹配所有符合格式的列:import pandas as pd # 匹配CSV中的日期格式:%m=月份 %d=日期 %Y=4位年份 %I=12小时制小时 %M=分钟 %S=秒 %p=AM/PM标识 date_parser = lambda x: pd.to_datetime(x, format="%m/%d/%Y %I:%M:%S%p", errors="coerce") df = pd.read_csv( "你的CSV文件路径", parse_dates=True, # 自动尝试解析所有疑似日期的列 date_parser=date_parser ) - 方案2:先全量读为字符串再批量转换(兼容性更高)
如果不同CSV的日期格式存在细微差异,先读为字符串再转换更稳妥,不会在读入阶段报错:# 读入时所有列保持字符串格式 df = pd.read_csv("你的CSV文件路径", dtype=str) # 遍历所有列尝试转换为日期,转换失败的列保持原内容不变 for col in df.columns: df[col] = pd.to_datetime(df[col], format="%m/%d/%Y %I:%M:%S%p", errors="ignore") - 批量处理160个CSV的示例代码
import os import pandas as pd # 存放所有CSV的文件夹路径 csv_folder = "./your_csv_folder" processed_list = [] for filename in os.listdir(csv_folder): if not filename.endswith(".csv"): continue file_path = os.path.join(csv_folder, filename) df = pd.read_csv(file_path, dtype=str) for col in df.columns: df[col] = pd.to_datetime(df[col], format="%m/%d/%Y %I:%M:%S%p", errors="ignore") processed_list.append(df) # 处理完所有文件后可按需单独使用或合并所有DataFrame
结果验证
处理完成后执行print(df.dtypes)即可查看所有列的类型,确认日期列是否已转换为datetime64[ns]格式。
内容的提问来源于stack exchange,提问作者Rajesh Om
相关产品推荐
相关产品推荐

