如何修复:值的长度与索引长度不匹配
使用 pandas 时可能遇到的错误是:
ValueError: Length of values does not match length of index
当您尝试将 NumPy 值数组分配给 pandas DataFrame 中的新列,但数组的长度与索引的当前长度不匹配时,会发生此错误。
以下示例展示了如何在实践中纠正此错误。
如何重现错误
假设我们有以下 pandas DataFrame:
import pandas as pd #define DataFrame df = pd. DataFrame ({' points ': [25, 12, 15, 14], ' assists ': [5, 7, 13, 12]}) #view DataFrame print (df) assist points 0 25 5 1 12 7 2 15 13 3 14 12
现在假设我们尝试添加一个名为“bounces”的新列作为 NumPy 数组:
import numpy as np
#attempt to add 'rebounds' column
df[' rebounds '] = np. array ([3, 3, 7])
ValueError : Length of values (3) does not match length of index (4)
我们收到ValueError 是因为我们尝试将长度为3 的NumPy 数组添加到索引长度为4的 DataFrame 中。
如何修复错误
修复此错误的最简单方法是使用 pandas 系列而不是 NumPy 数组创建一个新列。
默认情况下,如果 pandas 系列的长度与 DataFrame 索引的长度不对应,则将输入 NaN 值:
#create 'rebounds' column
df[' rebounds '] = pd. Series ([3, 3, 7])
#view updated DataFrame
df
points assists rebounds
0 25 5 3.0
1 12 7 3.0
2 15 13 7.0
3 14 12 NaN
使用 pandas 系列,我们可以成功添加“bounces”列,并且缺失的值只需用 NaN 填充即可。
请注意,我们可以使用fillna()方法快速将 NaN 值转换为另一个值(例如零),如下所示:
#fill in NaN values with zero
df = df. fillna (0)
#view updated DataFrame
df
points assists rebounds
0 25 5 3.0
1 12 7 3.0
2 15 13 7.0
3 14 12 0.0
请注意,NaN 值已转换为零。
其他资源
以下教程解释了如何修复 Python 中的其他常见错误:
如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播