使用非字母数字字符过滤掉行

时间:2018-05-30 02:29:57

标签: python pandas dataframe

我正在尝试从现有的DataFrame中获取一个DataFrame,其中只包含某列(其值为字符串)中的值不包含特定字符的行。

即。如果我们不想要的角色是'('

原始数据框:

   some_col my_column
0         1      some
1         2      word
2         3    hello(

新数据框:

   some_col my_column
0         1      some
1         2      word

我尝试了df.loc['(' not in df['my_column']],但这不起作用,因为df['my_column']是一个Series对象。

我也试过:df.loc[not df.my_column.str.contains('(')],这也行不通。

2 个答案:

答案 0 :(得分:3)

您正在寻找str.isalpha

df[df.my_column.str.isalpha()]

   some_col my_column
0         1      some
1         2      word

如果您想保留字母和数字,类似的方法是str.isalnum

如果要处理字母和空白字符,请使用

df[~df.my_column.str.contains(r'[^\w\s]')]

   some_col my_column
0         1      some
1         2      word

最后,如果您想要删除整个标点符号,我在这里写了一个Q& A,这可能是一个有用的读物​​:Fast punctuation removal with pandas

答案 1 :(得分:2)

如果你想过滤掉那个角色:

否定str.contains

逃离开放的paren。某些字符可以解释为特殊的正则表达式字符。你可以用反斜杠来逃避它们。

df[~df.my_column.str.contains('\(')]

   some_col my_column
0         1      some
1         2      word

str.match所有非开放式的

顺便说一下,这是一个坏主意!检查整个字符串,它不是带有正则表达式的字符。

df[df.my_column.str.match('^[^\(]*$')]

   some_col my_column
0         1      some
1         2      word

使用in

进行理解
df[['(' not in x for x in df.my_column]]

   some_col my_column
0         1      some
1         2      word