我有一个FIFA 19数据集,其中包含来自100多个国家/地区的1000多名球员的数据。我想制作一个条形图,显示玩家数量大于3的国籍分布。这是我尝试过的事情:
nation = fifa_19[fifa_19['Nationality'].value_counts()>=3]
plt.figure(figsize=(30, 15))
sns.set(style="whitegrid")
sns.countplot(nation, order = fifa_19['Nationality'].value_counts().index)
plt.title('Distribution of Nationalities of players')
plt.xlabel('Nationality')
plt.ylabel('Frequency')
我收到此错误:
IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
我正在制作示例DataFrame并将其添加到此处。
fifa_19 = pd.DataFrame({'Player':['A','B','C','D','E','F','E','G','H'],'Nationality':['USA','USA','USA','Canada','Pakistan','India', 'Brazil','Brazil','Brazil']})
如果有人可以帮助我,那就太好了。
问题是,在您的代码中.value_counts()
系列无法用作fifa_19
数据帧的索引。相反:
nation = fifa_19['Nationality'].value_counts()
nation = nation.loc[nation >= 3]
plt.figure(figsize=(30, 15))
sns.set(style="whitegrid")
sns.barplot(data=nation, x="Country", y="Frequency", order = fifa_19['Nationality'].value_counts().index)
plt.title('Distribution of Nationalities of players')
plt.xlabel('Nationality')
plt.ylabel('Frequency')
注意:如果您不希望不符合3个玩家阈值的国籍的空值,请更改此行:
sns.barplot(data=nation, x="Country", y="Frequency", order = fifa_19['Nationality'].value_counts().index)
to
order = pd.DataFrame(fifa_19['Nationality'].value_counts().index).join(nation["Country"], how="inner")["Country"]
sns.barplot(data=nation, x="Country", y="Frequency", order = order)