将 Pandas DataFrame 传递给函数的最佳实践

问题描述

我目前正在使用一些 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)
)