Pandas过滤器无法按预期工作

时间:2015-03-17 16:04:15

标签: python regex python-3.x pandas

我有一个pandas数据帧,我需要删除某些与给定列中的正则表达式模式不匹配的行。我需要运行正则表达式的列格式为:lastname,firstname,我想删除该列中与该格式不匹配的所有行。我正在尝试使用pandas过滤器方法,我尝试过这样使用命令:
edited_df = idf['Name'].filter(regex="([aA-zZ]*)([,]{1})([aA-zZ]*)")
edited_df = idf['Name'].filter(regex="/([aA-zZ]*)([,]{1})([aA-zZ]*)/")
但是,这样做会产生这个错误:
TypeError: can't use a string pattern on a bytes-like object
type(idf['Name'])的结果是一个系列,其中每个条目都是一个字符串,每type(idf['CIO'][1]) 我看到了这个问题Pandas filter rows,但我想让我的程序更加模块化,每次添加名称时都不必调整名称列表。
我使用测试字符串在http://pythex.org/测试了我的正则表达式,并且它按预期匹配,所以我假设我使用的过滤器方法不正确。非常感谢任何帮助 此外,一个不太重要的问题是,是否可以访问在修改后的数据框中从正则表达式创建的捕获组。

1 个答案:

答案 0 :(得分:2)

感谢EdChum的评论,以下是如何解决这个问题:
首先,使用以下内容删除NaN值:

idf.dropna(subset=['Name'], inplace=True)

然后,使用str.contains代替过滤器:

edited_df = idf[idf['Name'].str.contains(r"([aA-zZ]*)([,]{1})([aA-zZ]*)")]