为什么是python';s应用函数有时可以,有时不能改变数据帧的值?

为什么是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

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['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