Python 筛选出包含特殊字符的数据帧行的最快方法

Python 筛选出包含特殊字符的数据帧行的最快方法,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个特殊字符列表。比如说 BAD_CHARS = ['.', '&', '\(', '\)', ';', '-'] 我想删除包含这些特殊字符的pandas dataframe列中的所有行。目前我正在做以下工作 df = ''' words frequency & 11 CONDUCTED 3 (E.G., 5 EXPERIMENT 6

我有一个特殊字符列表。比如说

BAD_CHARS = ['.', '&', '\(', '\)', ';', '-']
我想删除包含这些特殊字符的pandas dataframe列中的所有行。目前我正在做以下工作

df = '''
        words  frequency
            &         11
    CONDUCTED          3
       (E.G.,          5
   EXPERIMENT          6
         (VS.          5
        (WARD          3
            -         14
        2006;          3
           3D          5
         ABLE          5
     ABSTRACT          3
  ACCOMPANIED          5
     ACTIVITY         11
           AD          5
       ADULTS          6
'''
for char in BAD_CHARS:
    df = df[~df['word'].str.contains(char)]

# Expected Result
        words  frequency
    CONDUCTED          3
   EXPERIMENT          6
           3D          5
         ABLE          5
     ABSTRACT          3
  ACCOMPANIED          5
     ACTIVITY         11
           AD          5
       ADULTS          6

首先它不起作用,其次我想它不快。那么,我怎样才能更快地做到这一点呢?谢谢

我相信您首先需要转义值,然后通过
和@c加入ᴏʟᴅsᴘᴇᴇᴅ 从
坏字符中的值中删除
\

import re

BAD_CHARS = ['.', '&', '(', ')', ';', '-']
pat = '|'.join(['({})'.format(re.escape(c)) for c in BAD_CHARS])

df = df[~df['words'].str.contains(pat)]
print (df)
          words  frequency
1     CONDUCTED          3
3    EXPERIMENT          6
8            3D          5
9          ABLE          5
10     ABSTRACT          3
11  ACCOMPANIED          5
12     ACTIVITY         11
13           AD          5
14       ADULTS          6
因为此返回空帧:

df[~df['word'].str.contains('|'.join(BAD_CHARS))]

@请把它归零。首先,不要逃脱大括号<代码>坏字符=['.'、'&'、'('、')'、';'、'-']
。接下来,您可以使用字符类,也可以使用
re.escape
。像这样的
df[~df['words'].str.contains([{}].”format('''.join(BAD_CHARS))]
如果您在复制时遇到问题,只需将其键入即可。它返回空框:(问题以重复形式结束,我已在评论中说明了他们问题的具体内容**。否则,我可以自己发布答案:/谢谢。多么简单:)@cᴏʟᴅsᴘᴇᴇᴅ - 我不明白
或者,我可以自己发布答案:/
你认为我会复制你的评论答案吗?我只使用了评论的一部分-不要逃避它,并添加提到的内容。