【发布时间】:2015-03-17 16:04:14
【问题描述】:
我有一个 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 objecttype(idf['Name']) 的结果是一个系列,其中的每个条目都是一个字符串,每个 type(idf['CIO'][1])。
我看到了这个问题Pandas filter rows,但我想让我的程序更加模块化,并且不必每次添加名称时都调整名称列表。
我用测试字符串在http://pythex.org/ 测试了我的正则表达式,它符合预期,所以我假设我错误地使用了过滤器方法。非常感谢任何帮助。
此外,一个不太重要的问题是是否可以访问从修改后的数据帧中的正则表达式创建的捕获组。
【问题讨论】:
-
你可以试试
idf[idf['Name'].str.contains(r"([aA-zZ]*)([,]{1})([aA-zZ]*)")] -
@EdChum 我得到了这个错误,
ValueError: cannot index with vector containing NA / NaN values即使在使用了 fillna (idf['Name'].fillna(value=0, inplace=True)) 之后。 -
尝试先删除
NaN值,以便idf['Name'].dropna()
标签: python regex python-3.x pandas