向DataFrame写入数据时遇ValueError:键与可迭代值长度不匹配
错误原因分析
- 无效的切片操作:代码里的
var = var[:98]完全错误——此时var还未定义,这行代码不仅毫无作用,还会引发额外的未定义变量错误,直接删除即可。 - 赋值逻辑错误:
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
相关产品推荐
相关产品推荐

