Pandas知识点-详解表级操作管道函数pipe
pipe()参数和用法介绍
pipe(func, *args, **kwargs):
func: 用于对数据进行表级处理的函数,函数可以是内置函数、库函数、自定义函数或匿名函数。 *args: 传递给函数func的位置参数。 **kwargs: 传递给函数func的关键字参数。
返回数据:
返回一个新的DataFrame。
pipe()函数基本使用
# coding=utf-8
import pandas as pd
import numpy as np
df = pd.DataFrame({'Col-1': [1, 3, 5], 'Col-2': [5, 7, 9]})
print(df)
res = df.pipe(np.square)
print('-'*30, '\n', res, sep='')
Col-1 Col-2
0 1 5
1 3 7
2 5 9
------------------------------
Col-1 Col-2
0 1 25
1 9 49
2 25 81
如果只对DataFrame做一次处理,建议使用apply(),pipe()函数的精髓在于对DataFrame做多次处理时,使用链式调用。
pipe()函数链式调用
df_one = np.square(df)
print('-'*30, '\n', df_one, sep='')
df_two = np.multiply(df_one, 2)
print('-'*30, '\n', df_two, sep='')
df_three = np.add(df_two, 10)
print('-'*30, '\n', df_three, sep='')
------------------------------
Col-1 Col-2
0 1 25
1 9 49
2 25 81
------------------------------
Col-1 Col-2
0 2 50
1 18 98
2 50 162
------------------------------
Col-1 Col-2
0 12 60
1 28 108
2 60 172
这三个函数也可以嵌套在一起,写到一行代码中。
result = np.add(np.multiply(np.square(df), 2), 10)
print('-'*30, '\n', result, sep='')
------------------------------
Col-1 Col-2
0 12 60
1 28 108
2 60 172
遇到类似的情况,非常适合使用pipe()来链式调用,提高可读性。
pipe_result = df.pipe(np.square).pipe(np.multiply, 2).pipe(np.add, 10)
print('-'*30, '\n', pipe_result, sep='')
------------------------------
Col-1 Col-2
0 12 60
1 28 108
2 60 172
pipe_result = (df.pipe(np.square)
.pipe(np.multiply, 2)
.pipe(np.add, 10))
print('-'*30, '\n', pipe_result, sep='')
------------------------------
Col-1 Col-2
0 12 60
1 28 108
2 60 172
pipe()中func的另一种传参方式
def add_num(num, dfx):
df_new = dfx.add(num)
return df_new
res = df.pipe((add_num, 'dfx'), 10)
print('-'*30, '\n', res, sep='')
res = df.pipe((add_num, 'dfx'), num=100)
print('-'*30, '\n', res, sep='')
------------------------------
Col-1 Col-2
0 11 15
1 13 17
2 15 19
------------------------------
Col-1 Col-2
0 101 105
1 103 107
2 105 109
参考文档:
[1] pandas中文网:https://www.pypandas.cn/docs/
相关阅读👉
评论