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

解决pandas中ValueError长度不匹配问题:保留前4列的代码修改

问题解决:修正长度不匹配错误并保留前4列

错误原因

你触发的ValueError是因为生成new_values的逻辑存在两个问题:一是循环过程中每次添加元素后就立刻转为DataFrame并设置列名,导致最终new_values的行数和原data的102行不匹配;二是部分行生成的年份列表长度不等于4,引发列名设置失败或后续拼接时的长度冲突。

修改后的完整代码

1. 修正new_values生成逻辑

min_year = data['Contract Start Year'].min()
max_year = int(data['Contract End Year'].max()) + 1
new_values = []

for i in range(len(data)):
    # 去掉[],避免返回Series导致转int出错
    start = int(data.loc[i, 'Contract Start Year'])
    try:
        end = int(data.loc[i, 'Contract End Year']) + 1
    except ValueError:
        print("处理错误:合同结束年份无法转为整数")
        end = start  # 出错时默认取起始年,防止后续崩溃
    # 生成年份列表并仅保留前4个元素,不足4个的补空字符串
    year_list = list(range(start, end))[:4]
    while len(year_list) < 4:
        year_list.append("")
    new_values.append(year_list)

# 循环结束后统一转为DataFrame并设置列名,保证行数和data一致
new_values = pd.DataFrame(new_values, columns=['a', 'b', 'c', 'd'])

2. 年份拼接逻辑(保留原写法或用更简洁方式)

# 原写法保留
data['Years'] = new_values['a'].astype(str) + " " + new_values['b'].astype(str) + " " + new_values['c'].astype(str) + " " + new_values['d'].astype(str)

# 可选:更简洁的拼接写法
data['Years'] = new_values.astype(str).agg(' '.join, axis=1)

关键修改点

  • 将DataFrame转换和列名设置移到循环结束后,确保new_values行数与data完全匹配
  • 用[:4]强制截取每个年份列表的前4个元素,不足的补空字符串,保证每行都有4个元素
  • 修正loc取值方式,避免返回Series导致转int出错
  • 给异常处理添加默认值,防止出错时end未定义引发新错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56