Python Pandas DataFrame日期列格式统一与排序问题
处理DataFrame中格式混乱的日期列标题并排序
步骤1:解析列标题为datetime对象
利用pd.to_datetime()自动识别多种格式的日期字符串,同时处理无效日期(如2022-13-01这类非法月份的输入):
import pandas as pd # 将列名转为datetime数组,errors='coerce'会把无效日期转为NaT(Not a Time) date_cols = pd.to_datetime(out.columns, errors='coerce')
步骤2:统一列标题格式
把解析后的datetime对象转换为你需要的统一格式(比如YYYY-MM-DD),非日期列保留原始名称:
# 定义目标日期格式,可根据需求修改为'MM/DD/YYYY'等 target_format = '%Y-%m-%d' # 生成新列名:有效日期用统一格式,无效/非日期列保留原名 new_columns = [dt.strftime(target_format) if pd.notna(dt) else col for dt, col in zip(date_cols, out.columns)] # 重命名DataFrame列 out.columns = new_columns
步骤3:按日期排序列
分离日期列与非日期列,对日期列进行升序/降序排序后重新排列:
# 区分日期列和非日期列 date_columns = [col for col in out.columns if pd.to_datetime(col, errors='coerce') is not pd.NaT] non_date_columns = [col for col in out.columns if col not in date_columns] # 升序排序日期列,降序则添加reverse=True参数 sorted_date_cols = sorted(date_columns, key=lambda x: pd.to_datetime(x)) # 重新排列列(非日期列在前,排序后的日期列在后,可按需调整顺序) out = out[non_date_columns + sorted_date_cols] # 降序排序写法: # sorted_date_cols = sorted(date_columns, key=lambda x: pd.to_datetime(x), reverse=True)
无效日期处理提示
像2022-13-01这类非法日期会被转为NaT,对应的列会保留原始名称,你可以根据业务需求选择删除、手动重命名或进一步校验修正。
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

