map
может быть намного быстрее, чем replace
Если ваш словарь содержит более двух ключей, использование map
может быть намного быстрее, чем replace
. Существуют две версии этого подхода, в зависимости от того, исчерпывает ли ваш словарь все возможные значения (а также хотите ли вы заменить несоответствия или оставить их как отсутствующие значения):
В этом случае форма очень проста:
df['col1'].map(di) # note: if the dictionary does not exhaustively map all
# entries then non-matched entries are changed to NaNs
Хотя map
чаще всего принимает функцию как свой аргумент, она может альтернативно принимать словарь или серию: Документация для Pandas.series.map
Если у вас есть не исчерпывающее отображение и вы хотите сохранить существующие переменные для несоответствий, вы можете добавить fillna
:
df['col1'].map(di).fillna(df['col1'])
, как в ответе @ jpp здесь: Заменить значения в серии pandas с помощью словаря эффективно
Используя следующие данные с версией pandas 0.23.1:
di = {1: "A", 2: "B", 3: "C", 4: "D", 5: "E", 6: "F", 7: "G", 8: "H" }
df = pd.DataFrame({ 'col1': np.random.choice( range(1,9), 100000 ) })
и тестируя с %timeit
, похоже, что map
примерно в 10 раз быстрее, чем replace
.
Обратите внимание, что ваше ускорение с map
будет отличаться в зависимости от ваших данных. Самое большое ускорение, похоже, связано с большими словарями и исчерпывающими заменами. См. Ответ @jpp (см. Выше) для более подробных тестов и обсуждения.
Это то, что я делаю для проверки на ошибки.
if(isset($responseKeys["error-codes"])){
//has errors
}
else{
//no errors
}
Также правильной переменной является g-recaptcha-response , а не gRecaptchaResponse .