如何修复: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 中的多行共享相同的team和position值。
因此,当我们尝试重塑 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:操作数无法与形状一起广播