如何修复:valueerror:索引包含重复条目,无法重塑


使用 pandas 时可能遇到的错误是:

 ValueError : Index contains duplicate entries, cannot reshape

当您尝试使用pivot()函数重塑pandas DataFrame,但生成的DataFrame中有多个值共享相同的索引值时,通常会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们有以下 pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
                   ' points ': [5, 7, 7, 9, 4, 9, 9, 12]})

#view DataFrame
df

        team position points
0 A G 5
1 A G 7
2 A F 7
3 A F 9
4 B G 4
5 B G 9
6 B F 9
7 B F 12

现在假设我们尝试旋转 DataFrame,使用团队作为行,位置作为列:

 #attempt to reshape DataFrame
df. pivot (index=' team ', columns=' position ', values=' points ')

ValueError : Index contains duplicate entries, cannot reshape

我们收到错误,因为 DataFrame 中的多行共享相同的teamposition值。

因此,当我们尝试重塑 DataFrame 时,pandas 不知道在结果 DataFrame 的每个单元格中显示哪个值。

如何修复错误

为了修复这个错误,我们可以使用带有特定aggfunc参数的pivot_table()函数以某种方式聚合数据值。

例如,我们可以使用pivot_table()创建一个新的DataFrame,该DataFrame使用团队作为行,位置作为列,以及DataFrame单元格中点值的总和:

 df. pivot_table (index=' team ', columns=' position ', values=' points ', aggfunc=' sum ')

position F G
team		
At 16 12
B 21 13

请注意,这次我们没有收到错误。

DataFrame 中的值显示每个团队位置组合的积分总和。

请注意,我们还可以为aggfunc使用不同的值,例如平均值:

 df. pivot_table (index=' team ', columns=' position ', values=' points ', aggfunc=' mean ')

position F G
team		
At 8.0 6.0
B 10.5 6.5

通过在pivot_table()函数中使用aggfunc参数,我们可以避免任何错误。

注意:您可以在此处找到pivot_table()函数的完整文档。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

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