将 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 功能。

所以我觉得第二种方式更好