运行 df.apply 在循环中使用 lambda 函数
run df.apply with lambda function in a loop
此代码片段运行良好:
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
是一个包含表示属性的字符串的变量,因此括号语法是正确的方法。
在这种情况下 x.art_kennz
您使用字符串,但在 for-loop
中您有不能使用的变量 .variables
。
试试这个:(在这种方法中,您逐行迭代)
for col_name in cols_with_spaces:
df[col_name] = df.apply(lambda row: myFunction(row[col_name]), axis=1)
如果你想逐列迭代你可以试试这个:
for col_name in cols_with_spaces:
df[col_name] = df[col_name].apply(myFunction)
此代码片段运行良好:
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
是一个包含表示属性的字符串的变量,因此括号语法是正确的方法。
在这种情况下 x.art_kennz
您使用字符串,但在 for-loop
中您有不能使用的变量 .variables
。
试试这个:(在这种方法中,您逐行迭代)
for col_name in cols_with_spaces:
df[col_name] = df.apply(lambda row: myFunction(row[col_name]), axis=1)
如果你想逐列迭代你可以试试这个:
for col_name in cols_with_spaces:
df[col_name] = df[col_name].apply(myFunction)