繁体   English   中英

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

[英]Filtering out rows with non-alphanumeric characters

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

你在找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

最后,如果你想删除整个标点符号,我在这里写了一个问答,这可能是一个有用的读物​​: 用熊猫快速删除标点符号

如果您要过滤掉该字符:

否定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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM