python - 在循环中使用 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 循环中的元素。什么是正确的语法?
解决方案
尝试:
for col_name in cols_with_spaces:
df[col_name] = df.apply(lambda x: myFunction(x[col_name])
说明:您可以使用属性语法访问 Serie,例如x.art_kennz
,但由于col_name
是包含表示属性的字符串的变量,因此括号语法是正确的方法。
推荐阅读
- javascript - 数组变量的问题
- algorithm - 在 Go 中回溯以查找有向无环图中的所有路径,将路径分配给解决方案切片的问题(Leetcode 797)
- google-sheets - 从列表中获取 Google 表格中的平均股票价格
- c++ - 通过引用传递时无法访问转发类型的类型别名
- java - 自定义数据对象在片段之间传递时保存其数据 - android
- javascript - NodeJS删除绑定函数的事件监听器
- configuration - cmake configure 的 gitache-populate 步骤给出错误:致命:模糊参数“稳定”:未知修订或路径不在工作树中
- python - 在 Jupyter 笔记本中键入时显示 pep8 错误
- javascript - 为什么我的 console.log 没有在这里输出任何东西?
- random - 重复 Math.random 变量而不在 three.js 中得到相同的结果