Python 为什么pandas value_counts()显示某些值的计数为零?

Python 为什么pandas value_counts()显示某些值的计数为零?,python,pandas,Python,Pandas,我有一个数据框,其中一列是带有以下标签的分类变量:['Short'、'Medium'、'Long'、'Very Long'、'extrement Long']。我正在尝试创建一个新的数据框,它将删除所有非常长的行 我尝试过以下方法: df2 = df.query('ride_type != "Extremely Long"') df2 = df[df['ride_type'] != 'Extremely Long'] 但是,当我运行.value_counts()时,我会得到以下结果: df2.

我有一个数据框,其中一列是带有以下标签的分类变量:
['Short'、'Medium'、'Long'、'Very Long'、'extrement 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

换句话说,
非常长的
仍然存在,所以我无法仅用我想要的四个类别绘制图表

这是分类数据的一个特征。您可能会遇到如下情况:

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

df
  ride_type
0      Long
1      Long
df = df.drop(df.index[df['A'] == 'cat'])
print(df['A'].value_counts())

dog       2
rabbit    2
Name: A, dtype: int64
在分类列上调用
value\u 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

您可以这样删除行:

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

df
  ride_type
0      Long
1      Long
df = df.drop(df.index[df['A'] == 'cat'])
print(df['A'].value_counts())

dog       2
rabbit    2
Name: A, dtype: int64

如果
df['ride_type'].dtype
是分类的,那么丢失的类别也会被记录下来。太棒了-谢谢!第一个解决方案工作得很好。如果你觉得答案是有用的,请考虑给它更多的爱。单击我的答案左侧的灰色复选框将其切换为绿色。如果你认为你会得到更多的答案,你可以再等一段时间(我的2c tho,根据你对问题的描述,这些可能是最好的选择)。回答不错:)+1