首页 > 解决方案 > 在循环中使用 lambda 函数运行 df.apply

问题描述

此代码段运行良好:

df['art_kennz'] = df.apply(lambda x:myFunction(x.art_kennz), axis=1)

但是,在这里我art_kennz在两个地方都对列名进行了硬编码:df['art_kennz']x.art_kennz. 现在,我想修改脚本,以便我有一个列名列表,并且 df.apply 为所有这些列运行。所以我尝试了这个:

cols_with_spaces = ['art_kennz', 'fk_wg_sch']
for col_name in cols_with_spaces:
    df[col_name] = df.apply(lambda x: myFunction(x.col_name)
                                               , axis=1)

但这给出了一个错误:

AttributeError: 'Series' object has no attribute 'col_name'

因为x.col_name. 这里, col_name 应该是 for 循环中的元素。什么是正确的语法?

标签: pythonpandasdataframedata-analysisattributeerror

解决方案


尝试:

for col_name in cols_with_spaces:
    df[col_name] = df.apply(lambda x: myFunction(x[col_name])

说明:您可以使用属性语法访问 Serie,例如x.art_kennz,但由于col_name是包含表示属性的字符串的变量,因此括号语法是正确的方法。


推荐阅读