我有一个数据框,其中一列是带有以下标签的类别变量:['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
仍然存在,所以我不能只用我想要的四个类别来绘制图表。
答案 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