Windows环境下Pandas新增列时出现值与索引长度不匹配报错
Pandas新增列报错:长度不匹配问题解决
问题代码
import pandas as pd sample_import=pd.read_csv('C:/Users/HP/Desktop/python programing/allpythonfiles/simple_csv.csv') new_column_values=list(range(1,10)) sample_import['new_column'] = new_column_values[:len(sample_import)] subset=sample_import.iloc[:5,:3] print(subset[['col1','col2','col3','new column']])
报错信息
File "C:\Users\HP\AppData\Roaming\Python\Python311\site-packages\pandas\core\frame.py", line 3978, in _setitem_ self._set_item(key, value) File "C:\Users\HP\AppData\Roaming\Python\Python311\site-packages\pandas\core\frame.py", line 4172, in _set_item value = self._sanitize_column(value) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\HP\AppData\Roaming\Python\Python311\site-packages\pandas\core\frame.py", line 4912, in _sanitize_column com.require_length_match(value, self.index) File "C:\Users\HP\AppData\Roaming\Python\Python311\site-packages\pandas\core\common.py", line 561, in require_length_match raise ValueError( ValueError: Length of values (9) does not match length of index (29) PS C:\Users\HP\Desktop\python programing>
错误原因
- 长度不匹配:
new_column_values是range(1,10)生成的9个元素列表,而CSV文件读取后的数据框有29行。你用new_column_values[:len(sample_import)]试图截取到匹配长度,但原列表只有9个元素,截取后还是9个,和29行的索引长度不匹配,导致报错。 - 列名拼写错误:代码里新增的列是
new_column,但最后打印时写的是new column(带空格),这会导致后续找不到目标列的问题。
修复方案
方案1:生成和数据框行数匹配的连续序列
如果需要给新增列填充连续递增的数值,直接根据数据框的行数生成对应长度的序列:
import pandas as pd sample_import=pd.read_csv('C:/Users/HP/Desktop/python programing/allpythonfiles/simple_csv.csv') # 根据数据框行数生成对应长度的连续值 new_column_values=list(range(1, len(sample_import)+1)) sample_import['new_column'] = new_column_values subset=sample_import.iloc[:5,:3] # 修正列名拼写,和新增列保持一致 print(subset[['col1','col2','col3','new_column']])
方案2:循环复用现有列表值
如果想复用现有列表的内容,循环填充到匹配数据框行数:
import pandas as pd sample_import=pd.read_csv('C:/Users/HP/Desktop/python programing/allpythonfiles/simple_csv.csv') new_column_values=list(range(1,10)) # 计算需要重复的次数,确保总长度覆盖数据框行数 repeat_times = len(sample_import) // len(new_column_values) + 1 filled_values = new_column_values * repeat_times sample_import['new_column'] = filled_values[:len(sample_import)] subset=sample_import.iloc[:5,:3] print(subset[['col1','col2','col3','new_column']])
方案3:填充固定值
如果新增列需要统一填充某个固定值,直接赋值即可,Pandas会自动将值广播到所有行:
import pandas as pd sample_import=pd.read_csv('C:/Users/HP/Desktop/python programing/allpythonfiles/simple_csv.csv') # 直接赋值固定值,自动适配所有行 sample_import['new_column'] = 0 subset=sample_import.iloc[:5,:3] print(subset[['col1','col2','col3','new_column']])
内容的提问来源于stack exchange,提问作者Soyeb Shaikh
相关产品推荐
相关产品推荐

