我正在尝试从现有的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('(')]
,这也行不通。
答案 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