我试图修改传递给函数的相同数据框,但更改不可见
当我对函数外部的数据框应用更改时,实现了预期的结果
test_df = test_df.apply(lambda x: x.str.strip("\t") if x.dtype == "object" else x)
打印出唯一值 -
print ("{0}-->{1}".format(val,pd.unique(test_df[val])))
O / P -
htn-->['yes' 'no']
dm-->['yes' 'no' ' yes']
cad-->['no' 'yes']
appet-->['good' 'poor']
pe-->['no' 'yes']
ane-->['no' 'yes']
classification-->['ckd' 'notckd']
但是,如果我将Dataframe传递给函数并应用上述相同的函数,则不会观察到更改
def FillMissing(dataFrame):
dataFrame = dataFrame.apply(lambda x: x.str.strip("\t") if x.dtype == "object" else x)
FillMissing(test_df)
O / P -
htn-->['yes' 'no']
dm-->['yes' 'no' ' yes' '\tno' '\tyes']
cad-->['no' 'yes' '\tno']
appet-->['good' 'poor']
pe-->['no' 'yes']
ane-->['no' 'yes']
classification-->['ckd' 'ckd\t' 'notckd']
如何在不将其声明为全局变量的情况下修改相同的现有数据框。
此外,我已尝试使用lambda函数的inplace标志,它不起作用
答案 0 :(得分:1)
你所面临的是初学者pythonistas的典型困境。看看这个例子
a = 10
b = a
b = 11
为b
分配值a
时,b
和a
实际上指向为存储值10
而创建的对象(< em>一切都是Python中的对象)。但是,当b
分配了新值11
时,a
未分配值,因为它仍然指向旧值10
。只有指针b
已更改
所以当你这样做时
def FillMissing(dataFrame):
dataFrame = dataFrame.apply(lambda x: x.str.strip("\t") if x.dtype == "object" else x)
FillMissing(test_df)
思想test_df
和dataFrame
最初具有相同的值,dataFrame
稍后会重新分配dataFrame.apply()
操作的结果,但test_df
会返回相同的值。解决方法是从方法返回新的dataFrame,可以单独使用,也可以根据需要返回元组。
一个很好的图表参考
http://foobarnbaz.com/2012/07/08/understanding-python-variables/
...但是在Python中,变量的工作方式更像标签,而不像之前看到的那样。当您在Python中进行赋值时,它会使用变量名称标记值....其他语言具有“变量”。 Python有'名字'