首页 > 解决方案 > 使用 lambda 表达式在类内调用 Python 函数

问题描述

我在一个包含两个函数的 .py 文件中有一个类。

new_column根据现有列(Col1 和 Col2)的值生成新列。

transform_df通过 lambda 表达式将前一个函数应用于数据帧。

最终结果如下所示:

Col1    Col2    col3
0   a   b   ab
1   a   b   ab
2   a   c   None
3   a   b   ab

如何在新文件/笔记本中使用这些功能?

# kept within file df_functions.py
class Functions():

    def __init__(self, path):
        self.path = path # path to .csv

    # function to create new column, based on Col1 and Col2 values
    def new_column(self, row):
        if (row['Col1'] == 'a') & (row['Col2'] == 'b'):
            return 'ab'

    # apply previously defined function via lambda expression
    def transform_df(self, path):        
        df = pd.read_csv(self.path)

        # apply function 'new_column' to df
        df['col3'] = df.apply(lambda row: self.new_column(row), axis=1)

        # other potential functions applications here

        return df

我尝试了以下方法:

from df_functions import Functions

df_path = '../datafile.csv'
FunctionsObject = Functions(path=df_path)

new_df = FunctionsObject.transform_df(path=df_path)

然而这会返回

NameError: ("name 'new_column' is not defined", 'occurred at index 0')

标签: pythonclassobjectlambda

解决方案


似乎是与对包含该类的 .py 文件进行编辑相关的问题。进行更改后,我重新启动了内核,导入的函数按预期工作。


推荐阅读