Замена панд на регулярное выражение и условия - PullRequest
0 голосов
/ 16 октября 2018

Следующий код работает, но требует 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 голосов
/ 16 октября 2018

Поскольку строки можно хэшировать, вы можете использовать словарь:

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'])

Похожие: Эффективно заменяйте значения в серии панд через словарь для объяснения , почему и , когда pd.Series.map + dict может опередить pd.Series.replace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...