Pandas 从列表中更改列中的值

Pandas 从列表中更改列中的值,pandas,dataframe,replace,rename,Pandas,Dataframe,Replace,Rename,我有一个带有索引“Country”的数据框 我想更改多个国家的名称,我在字典中有旧/新值,如下所示: 我尝试将值从列表和列表中拆分,但这也不起作用。代码没有错误,但我的数据帧中的值没有更改 `import pandas as pd import numpy as np energy = (pd.read_excel('Energy Indicators.xls', skiprows=17, sk

我有一个带有索引“Country”的数据框 我想更改多个国家的名称,我在字典中有旧/新值,如下所示:

我尝试将值从列表和列表中拆分,但这也不起作用。代码没有错误,但我的数据帧中的值没有更改

`import pandas as pd
import numpy as np

energy = (pd.read_excel('Energy Indicators.xls', 
                        skiprows=17, 
                        skip_footer=38))

energy = (energy.drop(energy.columns[[0, 1]], axis=1))
energy.columns = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']          
energy['Energy Supply'] = energy['Energy Supply'].apply(lambda x: x*1000000)

#This code isn't working properly
energy['Country'] = energy['Country'].replace({'China, Hong Kong Special Administrative Region':'Hong Kong', 'United Kingdom of Great Britain and Northern Ireland':'United Kingdom', 'Republic of Korea':'South Korea', 'United States of America':'United States', 'Iran (Islamic Republic of)':'Iran'})`
解决:这是我没有注意到的数据问题

energy['Country'] = (energy['Country'].str.replace('\s*\(.*?\)\s*', '').str.replace('\d+',''))
这条线位于“问题”线之下,实际上需要在更换工作开始之前进行清理。美利坚合众国20实际上在excel文件中,所以跳过它


谢谢你的帮助

您需要通过以下方式删除超级脚本:

此外,您还可以改进您的解决方案-对筛选列使用参数
usecols
,对设置新列名使用参数
names

names = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']

energy = pd.read_excel('Energy Indicators.xls', 
                        skiprows=17, 
                        skip_footer=38,
                        usecols=range(2,6), 
                        names=names)


d = {'China, Hong Kong Special Administrative Region':'Hong Kong', 
     'United Kingdom of Great Britain and Northern Ireland':'United Kingdom', 
     'Republic of Korea':'South Korea', 'United States of America':'United States', 
     'Iran (Islamic Republic of)':'Iran'}

#for multiple is faster use *
energy['Energy Supply'] = energy['Energy Supply'] * 1000000
energy['Country'] = energy['Country'].str.replace('\d', '').replace(d)
#print (energy)

您需要通过以下方式删除超级脚本:

此外,您还可以改进您的解决方案-对筛选列使用参数
usecols
,对设置新列名使用参数
names

names = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']

energy = pd.read_excel('Energy Indicators.xls', 
                        skiprows=17, 
                        skip_footer=38,
                        usecols=range(2,6), 
                        names=names)


d = {'China, Hong Kong Special Administrative Region':'Hong Kong', 
     'United Kingdom of Great Britain and Northern Ireland':'United Kingdom', 
     'Republic of Korea':'South Korea', 'United States of America':'United States', 
     'Iran (Islamic Republic of)':'Iran'}

#for multiple is faster use *
energy['Energy Supply'] = energy['Energy Supply'] * 1000000
energy['Country'] = energy['Country'].str.replace('\d', '').replace(d)
#print (energy)

你能添加一些数据样本吗?我的测试是,它工作得很好。我没有密码:(请修改答案。一个想法-什么是
print(键入(energy['Country'].iloc[0]))
Hmmm,代码可以改进,但看起来不错。你能分享你的excel文件-
gdocs
dropbox
WetTransfer
,还有什么吗?你能添加一些数据样本吗?我测试的是,它工作得很好。我没有密码:(请修改答案。一个想法是什么?
打印(键入(energy['Country'].iloc[0]))
Hmmm,代码可以改进,但看起来不错。你能分享你的excel文件-
gdocs
dropbox
WetTransfer
,还有什么吗?刚刚发现它并添加到顶部的答案中。谢谢:)谢谢。我还尝试改进一下您的解决方案,请检查。如果我的答案有帮助,请不要忘记。谢谢。刚刚发现它并添加到顶部的答案中。谢谢:)谢谢。我也尝试改进一下您的解决方案,请检查一下。如果我的回答有帮助,别忘了。谢谢