用正则表达式和条件替换熊猫

时间:2018-10-16 08:48:21

标签: python regex pandas

以下代码可以工作,但是需要在数据帧上进行3次传递,而且速度非常慢。应该有更好的方法吗?

df['raw_results'].replace("{}", '{"PhysicalDisks":[{"Status":"NaN","Name":"NaN"}]}', inplace=True)
df['raw_results'].replace('{"error":8004}', '{"PhysicalDisks":[{"Status":"error","Name":"NaN"}]}', inplace=True)
df['raw_results'].replace('{"error":8003}', '{"PhysicalDisks":[{"Status":"error","Name":"NaN"}]}', inplace=True)

更新

这可以更快地工作,但是如果使用正则表达式之类的东西处理错误以适应不同的错误代码,则效果会更好:

df['raw_results'] = np.where(df.raw_results == '{}', '{"PhysicalDisks":[{"Status":"NaN","Name":"NaN"}]}', df.raw_results)
df['raw_results'] = np.where(df.raw_results == '{"error":8004}', '{"PhysicalDisks":[{"Status":"error","Name":"NaN"}]}', df.raw_results)
df['raw_results'] = np.where(df.raw_results == '{"error":8003}', '{"PhysicalDisks":[{"Status":"error","Name":"NaN"}]}', df.raw_results)

1 个答案:

答案 0 :(得分:1)

由于字符串是可哈希的,因此您可以使用字典:

d = {'{}': '{"PhysicalDisks":[{"Status":"NaN","Name":"NaN"}]}',
     '{"error":8004}': '{"PhysicalDisks":[{"Status":"error","Name":"NaN"}]}',
     '{"error":8003}': '{"PhysicalDisks":[{"Status":"error","Name":"NaN"}]}'}

然后使用fillna用原始系列替换未映射的元素:

df['raw_results'] = df['raw_results'].map(d).fillna(df['raw_results'])

相关:Replace values in a pandas series via dictionary efficiently的解释为什么何时 pd.Series.map + dict可能胜过pd.Series.replace。 / p>