为什么是python';s应用函数有时可以,有时不能改变数据帧的值?
GDP是一个“pd数据框架” 在这个时候,当我想找到“韩国”时,它不起作用,它的名字仍然是“韩国,代表” 但是如果我把代码的最后一行改为为什么是python';s应用函数有时可以,有时不能改变数据帧的值?,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,GDP是一个“pd数据框架” 在这个时候,当我想找到“韩国”时,它不起作用,它的名字仍然是“韩国,代表” 但是如果我把代码的最后一行改为 def replace_name(row): if row['Country Name'] == 'Korea, Rep.': row['Country Name'] = 'South Korea' if row['Country Name'] == 'Iran, Islamic Rep.': row['Coun
def replace_name(row):
if row['Country Name'] == 'Korea, Rep.':
row['Country Name'] = 'South Korea'
if row['Country Name'] == 'Iran, Islamic Rep.':
row['Country Name'] = 'Iran'
if row['Country Name'] == 'Hong Kong SAR, China':
row['Country Name'] = 'Hong Kong'
return row
GDP.apply(replace_name, axis = 1)
它起作用了
起初,我认为原因是“应用”函数不能改变GDP本身,但当我处理另一个数据帧时,它实际上是有效的。代码如下:
GDP = GDP.apply(replace_name, axis = 1)
能量也是一个“pd.dataframe”
这一次,当我搜索“美国”时,它起作用了。并且原名为“美利坚合众国”,因此它成功地更改了名称
能源和GDP之间的唯一区别在于能源是从excel文件读取的,GDP是从CSV文件读取的。那么,是什么导致了不同的结果呢?我认为更好的方法是使用:
由于数据中可能存在一些空白,可能会有帮助:
d = {'Korea, Rep.':'South Korea', 'Iran, Islamic Rep.':'Iran',
'Hong Kong SAR, China':'Hong Kong'}
GDP['Country Name'] = GDP['Country Name'].replace(d, regex=True)
样本:
GDP['Country'] = GDP['Country'].str.strip()
谢谢大家!这对我帮助很大。关于最初的“apply”函数还有一点疑问,在我去掉空白后,它仍然无法更改国家名称。因此,使用apply更改国家名称的结果是否不确定?我不确定,但数据似乎存在一些问题。我认为最好的方法是只过滤这些问题行,并检查是否有差异。
GDP['Country'] = GDP['Country'].str.strip()
GDP = pd.DataFrame({'Country Name':[' Korea, Rep. ','a','Iran, Islamic Rep.','United States of America','s','United Kingdom of Great Britain and Northern Ireland'],
'Country': ['s','Hong Kong SAR, China','United States of America','Hong Kong SAR, China','s','f']})
#print (GDP)
d = {'Korea, Rep.':'South Korea', 'Iran, Islamic Rep.':'Iran',
'United Kingdom of Great Britain and Northern Ireland':'United Kingdom',
'Hong Kong SAR, China':'Hong Kong', 'United States of America':'United States'}
#replace by columns
#GDP['Country Name'] = GDP['Country Name'].replace(d, regex=True)
#GDP['Country'] = GDP['Country'].replace(d, regex=True)
#replace multiple columns
GDP[['Country Name','Country']] = GDP[['Country Name','Country']].replace(d, regex=True)
print (GDP)
Country Country Name
0 s South Korea
1 Hong Kong a
2 United States Iran
3 Hong Kong United States
4 s s
5 f United Kingdom