这是测试代码
df1 = pd.DataFrame({'Country':['U.S.A.']})
df2 = df1.copy()
df3 = df1.copy()
def replace1(df, col, mapVals):
df = df.replace({col: mapVals})
def replace2(df, col, mapVals):
return df.replace({col: mapVals})
def replace3(df, col, mapVals):
df.replace({col: mapVals}, inplace=True)
replace1(df1, 'Country', {'U.S.A.':'USA'})
df2 = replace2(df2, 'Country', {'U.S.A.':'USA'})
replace3(df3, 'Country', {'U.S.A.':'USA'})
print(df1)
print(df2)
print(df3)
df1
产生"U.S.A."
,而df2
和df3
产生"USA"
我不明白为什么在DataFrame
函数中设置replace1()
无效。 replace2()
实际上与replace1()
一样吗?
我是DataFrame
的新手。请指出我的愚蠢。
答案 0 :(得分:1)
在功能replace1
中,您将df.replace({col: mapVals})
的输出设置为一个具有相同名称的新变量:df
。也就是说,您不会更改作为输入提供的原始对象的值。
本质上,这就是您正在做的事情:
def replace1(df, col, mapVals):
temp = df.replace({col: mapVals})
df = temp # Creating a variable that will overwrite the original input variable
所以df
不再是同一对象。
这是另一种选择,但是:
def replace1(df, col, mapVals):
df.iloc[:, :] = df.replace({col: mapVals})
答案 1 :(得分:0)
在replace1
中,您必须返回df
(类似于replace2
),因为您的更改不是就地完成的(就像您对replace3
所做的那样)。
def replace1(df, col, mapVals):
df = df.replace({col: mapVals})
return df
调用它时,您需要捕获返回的对象(请参阅here中的返回值)
df1 = replace1(df1, 'Country', {'U.S.A.':'USA'})
replace2()是否与replace1()有效吗?
replace2
使用return返回修改后的值。虽然return 1
仅进行更改(df.replace
),但不会返回更改后的DataFrame
。