使用匹配除提供的值之外的所有值的正则表达式替换pandas中的值

时间:2013-10-15 14:11:20

标签: python regex pandas

我想使用带有pandas的正则表达式来替换列中的值以标记问题的正确答案。 此列中的值为“1943” - 正确的值和其他年份 - 不正确。

我现在的代码是:

incorrect_dict= {'Q1':{'^(?!1943$).*': 0}}
df = df.replace(incorrect_dict, regex=True)

并且它不会替换pandas中的值。

正则表达式本身似乎没问题,因为它在我使用时起作用:

string ="1933"
regex = re.compile("^(?!1943$).*")
regex.findall(string)

我得到:

[u'1933']

for string ='1943'我得到'找不到匹配:'所以我认为正则表达式是正常的。但是当我使用if和df.replace时,值不会被替换。

感谢任何建议

1 个答案:

答案 0 :(得分:3)

我怀疑这些年被解析为整数。看看它是如何失败的:

In [17]: df = DataFrame({'Q1': [1933, 1943]})

In [18]: df.replace(incorrect_dict, regex=True)
Out[18]: 
     Q1
0  1933
1  1943

但是,如果我将年份转换为字符串,它会按预期工作。

In [19]: df['Q1'] = df['Q1'].map(str)

In [20]: df.replace(incorrect_dict, regex=True)
Out[20]: 
     Q1
0     0
1  1943

顺便说一句,我不相信将响应视为字符串并使用正则表达式是可行的方法。为什么不将年份作为整数并评估df['Q1'] == 1943?结果将为True / False,表示正确/不正确。似乎对我更有用。