【问题标题】:Best practice for passing Pandas DataFrame to functions将 Pandas DataFrame 传递给函数的最佳实践
【发布时间】:2021-05-01 11:17:17
【问题描述】:

我目前正在使用一些 DataFrame,并希望使我的代码模块化。这需要将 DataFrames 传递给函数。在将可变实例传递给函数时,我知道 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)

【问题讨论】:

    标签: python pandas function dataframe mutable


    【解决方案1】:

    我认为 选项 1 是不好的方法。为什么?因为是not Pure function(对可变引用参数的副作用)。

    如何谷歌了解详情:pure / deterministic / nondeterministic 函数。

    所以我认为第二种方式更好。

    【讨论】:

    • 选项 2 是处理数据帧并将其传递给函数的最佳做法,还是有更好的方法我应该注意。
    • @Boom 不确定您是否真的需要在每个函数中使用copy df。是的,如果你真的需要一个新的dataframe,你可以这样做
    【解决方案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)
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 2012-07-22
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多