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

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

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

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

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

dfddblmv

dfddblmv1#

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

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

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

  1. >>> df[df['COLUMN'].str.contains('ABC').fillna(False)]
  2. COLUMN
  3. 4 ADABC
  4. 31 BDABC
  5. 40 BABCB
  6. 88 AABCA
  7. 101 ABCBB
展开查看全部

相关问题