为什么熊猫的value_counts()某些值显示为零?

时间:2020-05-29 16:54:39

标签: python pandas

我有一个数据框,其中一列是带有以下标签的类别变量:['Short', 'Medium', 'Long', 'Very Long', 'Extremely Long']。我正在尝试创建一个新的数据框,该数据框将删除所有Extremely Long行。

我尝试通过以下方式进行此操作:

df2 = df.query('ride_type != "Extremely Long"')
df2 = df[df['ride_type'] != 'Extremely Long']

但是,当我运行.value_counts()时,我得到以下信息:

df2.ride_type.value_counts()
>>> Short             130474
Long              129701
Medium            129607
Very Long         110988
Extremely Long         0
Name: ride_type, dtype: int64

换句话说,Extremely Long仍然存在,所以我不能只用我想要的四个类别来绘制图表。

2 个答案:

答案 0 :(得分:6)

这是分类数据的功能。您可能会有类似以下的内容:

df = pd.DataFrame({'ride_type': pd.Categorical(
    ['Long', 'Long'], categories=['Long', 'Short'])})

df
  ride_type
0      Long
1      Long

在类别列上调用value_counts会记录所有类别的计数,而不仅仅是存在的类别。

df['ride_type'].value_counts()    

Long     2
Short    0
Name: ride_type, dtype: int64

解决方案是删除未使用的类别,或转换为字符串:

df['ride_type'].cat.remove_unused_categories().value_counts() 

Long    2
Name: ride_type, dtype: int64

# or,
df['ride_type'].astype(str).value_counts() 

Long    2
Name: ride_type, dtype: int64

答案 1 :(得分:0)

您可以像这样删除行:

df = df.drop(df.index[df['A'] == 'cat'])
print(df['A'].value_counts())

dog       2
rabbit    2
Name: A, dtype: int64