.loc替换所有列值而不仅仅是索引列

时间:2018-05-04 15:10:58

标签: python pandas dataframe

我的代码如下:

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 :(得分:3)

您需要指明要更改的列,或者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]
来自Pandas文档的

This post很长,但在这样的时候可能会有所帮助。

正如@COLDSPEED在评论中提到的,你可以简单地

df['Country Name'].replace(
                         ['Korea, Rep.', 'Iran, Islamic Rep.', 'Hong Kong SAR, China'], 
                         ['South Korea', 'Iran', 'Hong Kong'],
                         inplace = True)