Pandas:下降后值仍然存在

Pandas: after dropping value is still present

我试图删除值并绘制计数图,但值仍然存在。我做错了什么?

df = df.drop(df[(df['market_segment'] == 'Undefined') & (df['market_segment'] == 'Aviation')].index)
plt.figure(figsize=(12,8))
sns.countplot(x='market_segment',data=df,hue='hotel')
plt.show()

问题是您要删除 market_segment 同时为 Undefined Aviation 的行。这显然是无稽之谈。

将您的 AND (&) 更改为 OR (|):

df = df.drop(df[(df['market_segment'] == 'Undefined') | (df['market_segment'] == 'Aviation')].index)
#                                                     ^ changed from & to |

这样,所有 market_segmentUndefinedAviation 的行都将被删除。如果它是其中之一,它将被删除。

发生这种情况的原因有 2 个。

  1. 您过滤的第一行不正确

  2. 您的“market_segment”列可能是分类数据类型。在分类数据类型系列中,数据中未观察到的值可以传播到 seaborn,因此转换为对象或字符串数​​据类型可以解决此问题。

df = (
  df.loc[~df["market_segment"].isin(["Undefined", "Aviation"])]
  .astype({"market_segment": str})
)

plt.figure(figsize=(12,8))
sns.countplot(x='market_segment',data=df,hue='hotel')
plt.show()