首页 文章

为单行代码编写函数?

提问于
浏览
2

我目前正在使用pandas DataFrame并遇到了一个问题 . 是否应该有一个单独的函数来设置索引,或者它是否使代码变得复杂,因为你无论如何都可以编写一行代码 .

def set_time_as_index(df):
    return df.set_index('time')

当前代码的简化版本:

def create_df_rdy_for_export(input_data):
    dframe = pd.DataFrame(input_data)
    dframe = set_time_as_index(dframe)
    return dframe

或者写作更好:

def create_df_rdy_for_export(input_data):
    dframe = pd.DataFrame(input_data)
    dframe = dframe.set_index('time')
    return dframe

我只是将索引设置为时间列 . 并且因为它只在脚本中出现一次,所以不需要编写单独的函数,但我已经习惯了它,它感觉很奇怪,没有函数 . 有任何约定或性能权衡吗?

1 回答

  • 4

    这是一个基于意见的问题,但我会回答一个问题,因为在使用Pandas数据帧时存在约定 .

    一种常见的做法是 chain operations . 您可以简单地按顺序应用方法 . 例如(为了清晰起见,添加了额外的方法):

    def create_df_rdy_for_export(input_data):
        dframe = pd.DataFrame(input_data)\
                   .set_index('time')\
                   .set_axis(['col1', 'col2', 'col3'], axis=1)
        return dframe
    

    每一行代表一种不同的方法 . 在我看来,没有必要编写一个单独的函数来调用单个方法 . 对于更复杂的数据帧操作,您可以使用pd.DataFrame.pipe . 例如:

    def format_dataframe(df):
        df = df.set_index('time')\
               .set_axis(['col1', 'col2', 'col3'], axis=1)
        return df
    
    def create_df_rdy_for_export(input_data):
        dframe = pd.DataFrame(input_data).pipe(format_dataframe)
        return dframe
    

    这里的好处是您可以仅重用逻辑的操作部分用于其他用途,并且 pipe 仍然允许您链接其他方法 .

相关问题