You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas列重命名长度不匹配问题及日期格式修正咨询

问题分析与解决方案

错误原因

你的代码只生成了从第4列开始的62个新列名,但原DataFrame有65列,前3列(ID、Name、Date)没有被加入到new_col_names列表中,导致新列名长度(62)和原列数(65)不匹配,触发了ValueError。另外原代码还存在一个潜在问题:用'2022-12-0' + str(...)会让10号及以后的日期变成2022-12-010-IN这种错误格式。

快速修正原代码

保留前3列的原始列名,再拼接后面生成的新列名,同时修复日期补零逻辑:

n_cols = df.shape[1]
    
# 先保留前3列的原始列名
new_col_names = df.columns[:3].tolist()
for i in range(3, n_cols):
    day_num = ((i - 3) // 2) + 1
    # 自动补零生成两位日期格式
    day_str = f"{day_num:02d}"
    if (i - 3) % 2 == 0:
        new_col_names.append(f'2022-12-{day_str}-IN')
    else:
        new_col_names.append(f'2022-12-{day_str}-OUT')
    
df.columns = new_col_names

更优方案:直接处理原始列名

不需要依赖列索引计算日期,直接提取原始列名中的日期部分格式化,更灵活且不易出错:

def format_col_name(col):
    # 非日期列直接返回原列名
    if col in ['ID', 'Name', 'Date']:
        return col
    # 拆分原始列名,提取日期和后缀部分
    parts = col.split('-')
    year, month, day = parts[0], parts[1], parts[2].zfill(2)
    suffix = '-'.join(parts[3:])
    # 拼接成目标格式
    return f"{year}-{month}-{day}-{suffix}"

# 批量处理所有列名
df.columns = [format_col_name(col) for col in df.columns]

这个方案的优势:

  • 不依赖列的索引位置,列顺序变化也能正常工作
  • 自动处理所有日期(包括10号及以后),避免硬编码错误
  • 兼容任意日期后缀(只要后缀在-之后都能正确提取)

补充说明

如果你的日期范围是2022年1月至12月,只需调整上述代码中的日期提取逻辑即可,核心格式化逻辑通用。

内容的提问来源于stack exchange,提问作者Simon GIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:45:30