我正在尝试创建一个将通过该函数进行清理和数据帧的函数。但是我注意到返回的df已经清理干净但不能代替原来的df。
如何在数据框上运行UDF并保持更新的数据框保存到位?
P.S。我知道我可以将这些规则组合成一行,但我创建的功能要复杂得多,所以我不想为这个例子组合
df = pd.DataFrame({'Key': ['3', '9', '9', '9', '9','34','34', '34'],
'LastFour': ['2290', '0087', 'M433','M433','25','25','25','25'],
'NUM': [20120528, 20120507, 20120615,20120629,20120621,20120305,20120506,20120506]})
def cleaner(x):
x = x[x['Key'] == '9']
x = x[x['LastFour'] == 'M433']
x = x[x['NUM'] == 20120615]
return x
cleaner(df)
来自UDF的结果:
Key LastFour NUM
2 9 M433 20120615
但是如果我在函数之后运行df,那么我仍然得到原始数据集:
Key LastFour NUM
0 3 2290 20120528
1 9 0087 20120507
2 9 M433 20120615
3 9 M433 20120629
4 9 25 20120621
5 34 25 20120305
6 34 25 20120506
7 34 25 20120506
答案 0 :(得分:1)
您需要将cleaner(df)
的结果分配回df
,如下所示:
df = cleaner(df)
另一种方法是使用pd.DataFrame.pipe
通过函数传递数据帧:
df = df.pipe(cleaner)