问题描述
我目前正在使用一些 DataFrame 并希望使我的代码模块化。这需要将 DataFrame 传递给函数。我知道 DataFrame 的可变性质以及将可变实例传递给函数时的一些“陷阱”。 DataFrames 的功能是否有最佳实践?我应该在函数内复制一份然后传回去吗?或者我应该在函数内更改 df 并返回 None ?
选项 1 还是选项 2 更好?下面是传达这个想法的基本代码:
选项 1:
def test(df):
df['col1'] = df['col1']+1
return None
test(df)
选项 2:
def test(main_df):
df = main_df.copy()
df['col1'] = df['col1']+1
return df
main_df = test(main_df)
解决方法
我认为选项 1 是糟糕的方式。为什么?因为是 not Pure function(对可变引用参数的副作用)。
如何通过谷歌搜索详情:pure
/ deterministic
/ nondeterministic
函数。
所以我认为第二种方式更好。
,我使用了很多 DataFrame.pipe
来组织我的代码,因此,我将说选项 2。pipe
获取并返回一个 DataFrame,您可以将多个步骤链接在一起。
def step1(main_df):
df = main_df.copy()
df['col1'] = df['col1']+1
return df
def step2(main_df):
df = main_df.copy()
df['col1'] = df['col1']+1
return df
def setp3(main_df):
df = main_df.copy()
df['col1'] = df['col1']+1
return df
main_df = (main_df.pipe(step1)
.pipe(step2)
.pipe(step3)
)