循环中使用带lambda的df.apply动态传列名的正确语法是什么?
报错根因
点语法x.col_name在pandas中会把col_name识别为固定的列名字面量,不会将其解析为for循环中动态赋值的变量,因此会去查找实际不存在的col_name列,触发属性错误。
正确写法
将点取值替换为方括号取值,方括号内支持传入变量作为动态列名:
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)
更优性能方案
逐行apply的执行效率较低,你无需遍历整行数据,直接对目标列单独应用函数即可,写法更简洁性能也更好:
cols_with_spaces = ['art_kennz', 'fk_wg_sch'] for col_name in cols_with_spaces: df[col_name] = df[col_name].apply(myFunction)
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

