[英]How can I pass function as argument with parameter in python pandas pipe
我想制作一些使用熊貓管道的功能。
像這樣
import pandas as pd
def foo(df):
df['A'] = 1
return df
def goo(df):
df['B'] = 2
return df
def hoo(df, arg1):
df[arg1] = 3
return df
df = pd.DataFrame.from_dict({"A":[1, 2, 3],
"B":[4, 5, 6]})
print(df)
(df.pipe(foo)
.pipe(goo)
.pipe(hoo, arg1='Hello')
)
print(df)
第一張印刷品是
A B
0 1 4
1 2 5
2 3 6
第二個點是
A B Hello
0 1 2 3
1 1 2 3
2 1 2 3
這是無意義的代碼,易於理解。
函數 sch 有許多組合,如 foo、goo、hoo。 我需要抽象這個管道代碼。
import pandas as pd
def foo(df):
df['A'] += 1
return df
def goo(df):
df['B'] += 2
return df
def hoo(df, arg1):
df[arg1] = 3
return df
def pipe_line(df, func_list, kargs_list):
for func, kargs in zip(func_list, kargs_list):
df = func(df, **kargs)
return df
df = pd.DataFrame.from_dict({"A":[1, 2, 3],
"B":[4, 5, 6]})
df = pipe_line(df,
[foo, goo, hoo],
[{}, {}, dict(arg1="HELLO")])
print(df)
但是, pipe_line函數非常難看。 如何升級此功能的可讀性?
pipe_line
根本不需要太多:只需重復將函數應用於先前函數的返回值,直到函數用完。
def pipe_line(df, fs):
for f in fs:
df = f(df)
return df
訣竅是定義適當的函數,它們都采用單個數據幀參數。 functools.partial
對此有所幫助。
from functools import partial
df = pipeline(df, [foo, goo, partial(hoo, arg1="HELLO")])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.