如果使用正则表达式匹配两列中的名称,则创建返回true / false的新列

时间:2019-04-09 04:35:54

标签: python regex pandas

我有一个数据框,我试图匹配两个列的列字符串值以创建一个新列,如果两个列值匹配,则返回true,否则返回false。 想要使用match和regex,删除所有非字母数字字符并使用小写字母来匹配名称

pattern = re.compile('[^ a-zA-Z]')

    Name A         Name B
0   yGZ,)          ygz.
1   (CGI)          C.G.I
2   Exto           exto.
3   Golden         UTF

我正在考虑尝试这样的事情:

dataframe['Name A', 'Name B'].str.match(pattern, flags= re.IGNORECASE)

    Name A         Name B    Result
0   yGZ,)          ygz.       True
1   (CGI)          C.G.I      True
2   Exto           exto.      True
3   Golden         UTF        False

2 个答案:

答案 0 :(得分:3)

可以使用pd.DataFrame.replace来清理您的字符串,然后使用eq进行比较。当然,如果您希望维护原始df的副本,只需将返回的数据框分配给新变量;} ​​

df = df.replace("[^a-zA-Z0-9]", '', regex=True)

然后

df['Result'] = df['Name A'].str.lower().eq(df['Name B'].str.lower())

输出

    Name A  Name B  Result
0   yGZ     ygz     True
1   CGI     CGI     True
2   Exto    exto    True
3   Golden  UTF     False

答案 1 :(得分:1)

您可以使用str.replace删除标点符号(另请参阅我的另一篇文章Fast punctuation removal with pandas),然后

u = df.apply(lambda x: x.str.replace(r'[^\w]', '').str.lower())
df['Result'] = u['Name A'] == u['Name B']
df

   Name A Name B  Result
0   yGZ,)   ygz.    True
1   (CGI)  C.G.I    True
2    Exto  exto.    True
3  Golden    UTF   False