Выполните множественную замену пандами в одной строке кода - PullRequest
0 голосов
/ 21 октября 2018

Я хочу изменить свои данные следующим образом:

"Republic of Korea": "South Korea",
"United States of America": "United States",
"United Kingdom of Great Britain and Northern Ireland": "United Kingdom",
"China, Hong Kong Special Administrative Region": "Hong Kong"

В настоящее время я использую код:

energy.Country[energy.Country == "Republic of Korea"] = "South Korea"
energy.Country[energy.Country == "United States of America"] = "United States"
energy.Country[energy.Country == "United
               Kingdom of Great Britain and Northern Ireland"] = "United Kingdom"
energy.Country[energy.Country == "China, 
               Hong Kong Special Administrative Region"] ="Hong Kong"`

Я пытался использовать метод .replace, чтобы сделать то же самое, передав аргументы в виде словаря:

energy.replace('Country' : {"Republic of Korea": "South Korea", "United States of America": "United States", "United Kingdom of Great Britain and Northern Ireland": "United Kingdom", "China, Hong Kong Special Administrative Region": "Hong Kong"})

Но, похоже, это не работает, есть ли более чистый и аккуратный способ сделать это?

1 Ответ

0 голосов
/ 21 октября 2018

Звоните replace на Series, это просто проще.

repl_dict = {"Republic of Korea": "South Korea", ...}
energy['Country'] = energy['Country'].replace(repl_dict)

Обратите внимание, что это не подходящее место для использования map, потому что записи в "Страна", которые не сопоставляются ни с чем в repl_dict, будут заменены на NaN.


Другой вариант - замена на основе списка:

energy['Country'] = [
    repl_dict.get(x, x) for x in energy['Country'].tolist()] 

Не такой краткий, как replace, но, безусловно, очень компетентный с точки зрения производительности.

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