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

7

我目前正在处理一些数据框架(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)
2个回答

3

我认为选项1不是一个好的方式。为什么?因为它不是纯函数(对可变引用参数产生副作用)。

如何通过谷歌获取详细信息:/确定性/非确定性函数。

因此,我认为第二种方法更好。


选项2是否是处理数据框并将其传递给函数的最佳实践,还是我应该了解更好的方法。 - Boom
1
@Boom 不确定你是否真的需要在每个函数中“复制df”。是的,如果你确实需要一个新的dataframe,那么你可以这样做。 - Danila Ganchar

2

我经常使用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)
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接