使用Pandas绘制指定参数饼图时遇报错,如何修复?
原始代码
import pandas as pd import matplotlib plot = input() plot = str(plot) df = pd.DataFrame({'Perimeter': [8, 16, 20], 'Area': [2, 16, 25]}, index=['Square 1', 'Square 2', 'Square 3']) plot = df.plot.pie(y={plot}, figsize=(5, 5))
报错信息
C:\Users\KIAN\PycharmProjects\pythonProject\k.py:12: FutureWarning:
Passing a set as an indexer is deprecated and will raise in a future
version. Use a list instead. plot = df.plot.pie(y={plot},
figsize=(5, 5))Traceback (most recent call last):
File "C:\Users\KIAN\PycharmProjects\pythonProject\k.py", line 12, in
plot = df.plot.pie(y={plot}, figsize=(5, 5))
File
"C:\Users\KIAN\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\plotting_core.py",
line 1613, in pie
return self(kind="pie", **kwargs)File
"C:\Users\KIAN\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\plotting_core.py",
line 960, in call
data.index.name = yFile
"C:\Users\KIAN\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\core\indexes\base.py",
line 1751, in name
maybe_extract_name(value, None, type(self))File
"C:\Users\KIAN\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\core\indexes\base.py",
line 7421, in maybe_extract_name
raise TypeError(f"{cls.name}.name must be a hashable type")TypeError: Index.name must be a hashable type
报错原因
- 参数类型不合法:
df.plot.pie()的y参数仅接受字符串(指定单列)或列表(指定多列),但代码中用{plot}创建了集合,这不符合参数要求,FutureWarning也明确提示集合作为索引器已被弃用。 - 哈希类型冲突:pandas内部会尝试将
y的值设置为数据索引的名称,但集合属于不可哈希的类型,直接触发TypeError: Index.name must be a hashable type错误。
修复方案
- 将
y={plot}改为y=plot,直接传入字符串类型的列名 - 导入
matplotlib.pyplot并调用show()方法,确保图表能正常显示
修复后的完整代码
import pandas as pd import matplotlib.pyplot as plt plot = input() plot = str(plot) df = pd.DataFrame({'Perimeter': [8, 16, 20], 'Area': [2, 16, 25]}, index=['Square 1', 'Square 2', 'Square 3']) # 直接传入列名字符串 df.plot.pie(y=plot, figsize=(5, 5)) # 显示图表 plt.show()
内容的提问来源于stack exchange,提问作者Kian Murray

