.loc заменяет все значения столбцов, а не только индексированный столбец - PullRequest
0 голосов
/ 04 мая 2018

Мой код выглядит так:

GDP = pd.read_excel("GDP_in.xls", skiprows=4)
GDP.loc[GDP['Country Name'] == 'Korea, Rep.'] = 'South Korea'
GDP.loc[GDP['Country Name'] == 'Iran, Islamic Rep.'] = 'Iran'
GDP.loc[GDP['Country Name'] == 'Hong Kong SAR, China'] = 'Hong Kong'
GDP = GDP.set_index(['Country Name'])
GDP = GDP.iloc[:, 49:59]

Я ожидал, что это просто изменит значение для столбца «Название страны», но это изменит значения всех столбцов. Например, все столбцы в строке «Корея, респ.» были изменены на значение 'Южная Корея' в столбцах 49-59.

Полученный df выглядит примерно так:

               2006         2007         2008
United States  1e12         2e12        2.2e12
Iran           Iran         Iran         Iran
Australia      5e10         4e10         3e10 
South Korea   South Korea  South Korea  South Korea

1 Ответ

0 голосов
/ 04 мая 2018

Вам нужно указать, какой столбец вы хотите изменить, или pandas предположит, что вам нужны все столбцы. При использовании .loc вы можете передавать ему строки и столбцы. .loc[row, col], поэтому просто введите название страны.

GDP = pd.read_excel("GDP_in.xls", skiprows=4)
GDP.loc[GDP['Country Name'] == 'Korea, Rep.', 'Country Name'] = 'South Korea'
GDP.loc[GDP['Country Name'] == 'Iran, Islamic Rep.', 'Country Name'] = 'Iran'
GDP.loc[GDP['Country Name'] == 'Hong Kong SAR, China', 'Country Name'] = 'Hong Kong'
GDP = GDP.set_index(['Country Name'])
GDP = GDP.iloc[:, 49:59]

Этот пост из Документации Панд длинен, но может быть полезен в такие времена.

Как упомянул @COLDSPEED в своем комментарии, вы можете просто

df['Country Name'].replace(
                         ['Korea, Rep.', 'Iran, Islamic Rep.', 'Hong Kong SAR, China'], 
                         ['South Korea', 'Iran', 'Hong Kong'],
                         inplace = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...