0

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

我现在的代码是:

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

并且它不会替换熊猫中的值。

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

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

我得到:

[u'1933']

对于 string = '1943' 我得到 'No match was found:' 所以我认为正则表达式没问题。但是当我将 if 与 df.replace 一起使用时,这些值不会被替换。

感谢您的任何建议

4

1 回答 1

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,表示正确/不正确。对我来说似乎更有用。

于 2013-10-15T14:53:47.670 回答