我想使用带有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时,值不会被替换。
感谢任何建议
答案 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,表示正确/不正确。似乎对我更有用。