我有一个相当复杂的函数,需要在数据帧的每一行上运行 - lambda 函数在这里不起作用
我想将多列从数据帧传递到函数。
在我的初始测试中,我尝试传递行并命名单个列(请注意,我的程序需要使用多个列),但收到以下错误消息
密钥错误:'rec_id'
我需要做什么才能将行传递给函数,以便我可以使用不同的列值(即 row.Name 或 row.rec_id?
一个简单的示例显示了我正在尝试做的事情:
def testapply(row):
print(row)
if row['rec_id']<863238:
return "X"
if row['rec_id']>863238 :
return "Y"
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'rec_id': [2532, 863238, 2212]}
df = pd.DataFrame(data)
df.apply(testapply)
谢谢!
您遇到的KeyError: 'rec_id'错误是因为您在使用df.apply()时没有正确指定传递给函数的参数。默认情况下,df.apply() 将整个 DataFrame 的每一列(而不是每一行)传递给函数,除非您显式指定 axis=1,这会按行应用函数。 此外,为了确保您可以访问每行的所有列,您应该使用 axis=1 参数,并且您可以使用 row['column_name'] 或 row.column_name 访问每行的特定列值。
修改后的代码:
import pandas as pd
def testapply(row):
print(f"Processing row with rec_id: {row['rec_id']}")
if row['rec_id'] < 863238:
return "X"
elif row['rec_id'] > 863238:
return "Y"
else:
return "Z"
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'rec_id': [2532, 863238, 2212]}
df = pd.DataFrame(data)
df['result'] = df.apply(testapply, axis=1)
print(df)