在给定的字符串条件下删除数据

2024-03-28 18:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解这里的机械原理,因为有以下几点。你知道吗

我有一个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: labels [False False False ... False False False] not contained in axis

是的,我也试过

skipinitialspace=True
axis=1

任何帮助都将不胜感激,谢谢。你知道吗


Tags: csvfalsedataframedfaba1b1aa
1条回答
网友
1楼 · 发布于 2024-03-28 18:28:10

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

相关问题 更多 >