python—有没有比使用.apply和str.contains更快的方法来搜索 Dataframe 的每一列中的字符串?

2w3rbyxf  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(233)

所以基本上我有一堆 Dataframe ,大约有100列,500-3000行,填充了不同的字符串值。现在我想在整个数据框中搜索字符串“airbag”,并删除不包含该字符串的每一行?我可以通过以下代码完成此操作:

df = df[df.apply(lambda row: row.astype(str).str.contains('Airbag', regex=False).any(), axis=1)]

这和我想的完全一样,但速度太慢了。所以我试着用矢量化或列表理解的方法来做,但我没能做到,也没能在互联网上找到一些示例代码。所以我的问题是,是否有可能加快这一进程?

dfddblmv

dfddblmv1#

让我们从这个 Dataframe 开始,使用随机字符串和数字 COLUMN :

import numpy as np
np.random.seed(0)
strings = np.apply_along_axis(''.join, 1, np.random.choice(list('ABCD'), size=(100, 5)))
junk = list(range(10))
col = list(strings)+junk
np.random.shuffle(col)
df = pd.DataFrame({'COLUMN': col})
>>> df.head()
  COLUMN
0  BBCAA
1      6
2  ADDDA
3  DCABB
4  ADABC

你可以简单地申请 pandas.Series.str.contains . 你需要使用 fillna 要考虑非字符串元素,请执行以下操作:

>>> df[df['COLUMN'].str.contains('ABC').fillna(False)]
    COLUMN
4    ADABC
31   BDABC
40   BABCB
88   AABCA
101  ABCBB

相关问题