如何将UDF应用于数据帧?

时间:2018-02-19 00:23:30

标签: python pandas user-defined-functions

我正在尝试创建一个将通过该函数进行清理和数据帧的函数。但是我注意到返回的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

1 个答案:

答案 0 :(得分:1)

您需要将cleaner(df)的结果分配回df,如下所示:

df = cleaner(df)

另一种方法是使用pd.DataFrame.pipe通过函数传递数据帧:

df = df.pipe(cleaner)