带"TypeError: Int64Index.name must be a hashable type"的熊猫多列饼图



我对编码很陌生,这似乎是我不理解的Python/Pandas/Matplotlib的一些基本方面。我对一般的答案很满意,但是,作为参考,这里是我的具体背景:

top_100.index = top_100.Company
top_100 = top_100.dropna()
top_20 = top_100[(top_100.Rank > 10) & (top_100.Rank < 21)]
top_20 = top_20.sort_values('Rank', ascending = True)
top_20.index = top_20.Rank
plt.figure()
top_20.plot.pie(y = ['USA_Retail_Sales_million',
'Worldwide_Retail_Sales_million'], subplots = True,
figsize = (16, 8), autopct = '%1.1f%%', legend = False)
plt.show()

完整的错误信息如下:

runcell(65, 'C:/Users/Adam/Desktop/DSCI 200/Practice/Wk 3 Practice.py')
Traceback (most recent call last):
File "C:UsersAdamDesktopDSCI 200PracticeWk 3 Practice.py", line 359, in <module>
top_20.plot.pie(y = ['USA_Retail_Sales_million',
File "C:UsersAdamanaconda3libsite-packagespandasplotting_core.py", line 1528, in pie
return self(kind="pie", **kwargs)
File "C:UsersAdamanaconda3libsite-packagespandasplotting_core.py", line 908, in __call__
data.index.name = y
File "C:UsersAdamanaconda3libsite-packagespandascoreindexesbase.py", line 1190, in name
maybe_extract_name(value, None, type(self))
File "C:UsersAdamanaconda3libsite-packagespandascoreindexesbase.py", line 5665, in maybe_extract_name
raise TypeError(f"{cls.__name__}.name must be a hashable type")
TypeError: Int64Index.name must be a hashable type
<Figure size 432x288 with 0 Axes>

为了它的价值,我没有任何接近5600行的代码。

每次我运行这段代码,我都会得到TypeError: Int64Index.name must be a hashable type。我已经多次改变了索引,但我已经意识到,我不认为我的索引是问题所在;我显然是在要求它改变一个不可改变的"东西"。我只是不知道那个"东西"是什么,或者如何处理这个问题。也许(显然)我对Int64Index.name是什么以及我要求它做什么有一个非常初级的理解。我当然没有断定我的代码是完全错误的,但是对我来说似乎是正确的——尽管这没什么价值。

我用以下最小示例(使用Pandas 1.2.0)重新创建了这个问题:

import pandas as pd
import matplotlib.pyplot as plt
# randomly made up data
top_20 = pd.DataFrame(
{'USA_Retail_Sales_million': [0.330, 4.87 , 5.97],
'Worldwide_Retail_Sales_million': [2439.7, 6051.8, 6378.1]},
)
top_20.plot.pie(
y=['USA_Retail_Sales_million', 'Worldwide_Retail_Sales_million'],
subplots=True, figsize=(16, 8), autopct='%1.1f%%', legend=False
)
plt.show()

上面的代码会产生相同的错误。pie函数根本不接受y参数的列表/元组。正确的方法是创建一个新的DataFrame,其中包含用于绘图的列。

import pandas as pd
import matplotlib.pyplot as plt

top_20 = pd.DataFrame(
{'USA_Retail_Sales_million': [0.330, 4.87 , 5.97],
'Worldwide_Retail_Sales_million': [2439.7, 6051.8, 6378.1]},
)
new_df = top_20[['USA_Retail_Sales_million', 'Worldwide_Retail_Sales_million']]
new_df.plot.pie(subplots=True, figsize=(16, 8), autopct='%1.1f%%', legend=False)
plt.show()

相关内容

最新更新