Pandas删除指定行后绘制countplot仍显示被删值,操作错在哪里?
问题原因及解决方案
1 核心逻辑错误
你删除行的筛选条件逻辑运算符使用错误:
- 代码中使用的
&代表逻辑与,要求market_segment列的取值同时等于Undefined和Aviation,该条件不可能成立,因此最终筛选出的待删除行是空的,等于没有做任何删除操作,对应取值自然会在统计图中保留。 - 你需要将
&替换为|(逻辑或),匹配满足任意一个取值的行进行删除。
2 分类数据残留问题
如果修正逻辑后对应取值仍然显示,是因为market_segment列为category数据类型:
- 分类类型的列会保留所有原始类别标签的元数据,哪怕对应取值的行已经全部删除,seaborn绘图时仍会读取所有类别标签进行展示,需要手动移除未使用的类别。
修正后的完整代码
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 修正逻辑运算符删除目标行 df = df.drop(df[(df['market_segment'] == 'Undefined') | (df['market_segment'] == 'Aviation')].index) # 若为分类类型,移除无数据的类别 if pd.api.types.is_categorical_dtype(df['market_segment']): df['market_segment'] = df['market_segment'].cat.remove_unused_categories() # 绘图 plt.figure(figsize=(12,8)) sns.countplot(x='market_segment',data=df,hue='hotel') plt.show()
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

