将 Pandas DataFrame 传递给函数的最佳实践
Best practice for passing Pandas DataFrame to functions
我目前正在使用一些 DataFrame,并希望将我的代码模块化。这需要将 DataFrame 传递给函数。当将可变实例传递给函数时,我知道 DataFrames 和一些 'gotchas' 的可变性质。 DataFrames 对函数有最佳实践吗?我应该在函数内复制一份然后传回去吗?或者我应该只在函数中更改 df 和 return 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)
我用了很多 DataFrame.pipe
来组织我的代码,所以我要说的是选项 2。pipe
采用和 returns 一个 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)
)
我认为选项 1 是不好的方法。为什么?因为是 not Pure function(对可变引用参数的副作用)。
如何google了解详情:pure
/ deterministic
/ nondeterministic
功能。
所以我觉得第二种方式更好
我目前正在使用一些 DataFrame,并希望将我的代码模块化。这需要将 DataFrame 传递给函数。当将可变实例传递给函数时,我知道 DataFrames 和一些 'gotchas' 的可变性质。 DataFrames 对函数有最佳实践吗?我应该在函数内复制一份然后传回去吗?或者我应该只在函数中更改 df 和 return 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)
我用了很多 DataFrame.pipe
来组织我的代码,所以我要说的是选项 2。pipe
采用和 returns 一个 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)
)
我认为选项 1 是不好的方法。为什么?因为是 not Pure function(对可变引用参数的副作用)。
如何google了解详情:pure
/ deterministic
/ nondeterministic
功能。
所以我觉得第二种方式更好