如何修复:值的长度与索引长度不匹配


使用 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:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注