Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制作分类列计数子集的条形图?_Python_Pandas_Data Visualization_Data Science - Fatal编程技术网

Python 如何制作分类列计数子集的条形图?

Python 如何制作分类列计数子集的条形图?,python,pandas,data-visualization,data-science,Python,Pandas,Data Visualization,Data Science,我有一个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'].valu

我有一个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).
我正在制作一个示例数据帧并将其添加到这里

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\u counts()
系列不能作为
fifa\u 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)


我尝试了你的建议,我得到了一个结果,但这是一个显示玩家数量分布的条形图。例如,如果两个国家有156名玩家。那么水平轴是“156”,垂直轴是2。我希望民族分布。将
sns.barplot…
替换为
sns.countplot(nation[“Frequency]”)
。虽然你的x和y标签没有意义/需要更改。我仍然有问题,但我已经解决了。问题是sns.countplot(),我不需要像countplot本身那样在sns.countplot()中使用值。value_counts()将与sns.barplot()一起使用,但只有在重置索引后,我才有两个不同的列。
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)