首页 > 解决方案 > 在给定字符串条件的情况下删除熊猫中的数据

问题描述

鉴于以下情况,我无法理解这里的机制。

我有一个dataframe阅读.csv

  a1 b1 c1
1 aa bb cc
2 ab ba ca 

df.drop(df['a1'].str.contains('aa',case = False))

我想删除列 a1 中包含“aa”的所有行

我相信在这里尝试了一切,但仍然得到:

ValueError:标签 [False False False ... False False False] 不包含在轴中

是的,我也试过

skipinitialspace=True
axis=1

任何帮助将不胜感激,谢谢。

标签: pythonpython-3.xpandasdataframe

解决方案


str.contains返回一个掩码:

df['a1'].str.contains('aa',case = False)

1     True
2    False
Name: a1, dtype: bool

但是,drop接受索引标签,而不是布尔掩码。如果您打开 上的帮助drop,您可能会亲眼看到:

?df.drop

Signature: df.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
Docstring:
Return new object with labels in requested axis removed.

Parameters
----------
labels : single label or list-like
    Index or column labels to drop.

您可以从掩码中找出索引标签并将其传递drop

idx = df.index[df['a1'].str.contains('aa')]
df.drop(idx)

   a1  b1  c1
2  ab  ba  ca

但是,这风太大了,所以我建议只坚持基于条件删除行的 pandaic 方法,布尔索引

df[~df['a1'].str.contains('aa')]

   a1  b1  c1
2  ab  ba  ca

如果有人有兴趣删除列表中包含字符串的行

df = df[~df['a1'].str.contains('|'.join(my_list))]

确保去除空格。归功于https://stackoverflow.com/a/45681254/9500464


推荐阅读