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

向DataFrame写入数据时遇ValueError:键与可迭代值长度不匹配

错误原因分析
  1. 无效的切片操作:代码里的var = var[:98]完全错误——此时var还未定义,这行代码不仅毫无作用,还会引发额外的未定义变量错误,直接删除即可。
  2. 赋值逻辑错误:output_df.loc[i:97] = var是试图把列表赋值给DataFrame的行范围,但loc[i:97]选中的是98行数据,若var是长度为98的列表,这种赋值会强制把列表元素对应到行的所有列,导致列数与值的长度不匹配,触发ValueError。你的真实需求是把每个score列表作为一列写入DataFrame,而非覆盖行数据。
修复方案

假设你希望四个score分别对应DataFrame的四列(列名可自定义),以下是两种可行的修改方式:

方案1:给已有DataFrame添加列(推荐)

# 先确保每个score列表的长度截断为98,匹配原CSV行数
variables = [positive_score[:98],
             negative_score[:98],
             polarity_score[:98],
             subjectivity_score[:98]]
# 定义对应列名
col_names = ['positive_score', 'negative_score', 'polarity_score', 'subjectivity_score']
# 逐个给DataFrame添加列
for col_name, var in zip(col_names, variables):
    output_df[col_name] = var

output_df.to_csv('Output_data.csv', index=False)

方案2:直接创建新的DataFrame

如果output_df还未初始化,可直接用列表和列名构造:

# 截断每个score列表到98个元素
variables = [positive_score[:98],
             negative_score[:98],
             polarity_score[:98],
             subjectivity_score[:98]]
col_names = ['positive_score', 'negative_score', 'polarity_score', 'subjectivity_score']

# 直接生成DataFrame
output_df = pd.DataFrame(dict(zip(col_names, variables)))
output_df.to_csv('Output_data.csv', index=False)
关键注意事项
  • 必须保证每个var列表的长度是98,和原CSV的行数完全一致,否则会出现新的长度不匹配错误。
  • 处理列数据时,直接通过列名赋值是最安全的方式,避免用行范围赋值的逻辑混淆行列关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:42:42