Pandas系列中重新命名特定值

6

我有以下熊猫数据 Series:

print(df.head())
          Country  Energy Supply Energy Supply per Capita  % Renewable
0     Afghanistan   3.210000e+08                       10    78.669280
1         Albania   1.020000e+08                       35   100.000000
2         Algeria   1.959000e+09                       51     0.551010
3  American Samoa            NaN                      ...     0.641026
4         Andorra   9.000000e+06                      121    88.695650

我该如何将阿富汗更名为阿富汗_new? 我可以设置索引:
df = df.set_index('Country')

然后尝试以下方式重命名国家:

df['Afghanistan'].rename('Afghanistan_renamed')

但是它无法正常工作。

是的,这个问题变得棘手的原因之一是你需要修改第一个列表中的第二个值。所以,想象一下你的数据像这样:[[0,“阿富汗”],[1,“阿尔巴尼亚”]]。要直接编辑阿富汗,你必须编辑df [0] [1]的数据结构。我相信也有包装方法,但这就是你要处理的问题。 - AgnosticDev
2个回答

9

如果需要替换 index,您可以这样做:

df = df.set_index('Country')
df = df.rename(index={'Afghanistan':'Afghanistan_renamed'})
print (df)
                     Energy Supply Energy Supply per Capita  % Renewable
Country                                                                 
Afghanistan_renamed   3.210000e+08                       10    78.669280
Albania               1.020000e+08                       35   100.000000
Algeria               1.959000e+09                       51     0.551010
American Samoa                 NaN                      ...     0.641026
Andorra               9.000000e+06                      121    88.695650

针对replace列进行操作:

df['Country'] = df['Country'].replace({'Afghanistan':'Afghanistan_renamed'})
df = df.set_index('Country')
print (df)
                     Energy Supply Energy Supply per Capita  % Renewable
Country                                                                 
Afghanistan_renamed   3.210000e+08                       10    78.669280
Albania               1.020000e+08                       35   100.000000
Algeria               1.959000e+09                       51     0.551010
American Samoa                 NaN                      ...     0.641026
Andorra               9.000000e+06                      121    88.695650

好的,当然可以。只需像{'Afghanistan':'Afghanistan_renamed', 'Albania':'Albania111'}这样扩展dict即可。 - jezrael
能否在不设置索引为Country的情况下完成? - feedthemachine
3
我认为是的,只有在第二种解决方案中省略 df = df.set_index('Country') - jezrael

0

你可以使用replace()而不是rename():

df['Country'].replace({'Afghanistan':'Afghanistan_renamed'}, inplace=True)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接