我有一个Pandas数据帧,其中一列是字符串。我从外部模块导入了一个函数来执行一些RegEx检查,并将此字符串缩减为一个简短的分类。
这有效:
df['PageCLass'] = df['PageClass'].apply(lambda x: PageClassify.page_classify(x))
然而,我真正想做的是在数据框中加入另一列'Rev',它恰好是一个浮点数或NaN进入检查。
当我这样做时:
df['PageCLass'] = df['PageClass'].apply(lambda x: PageClassify.page_classify(x,df['Rev']))
我正在第二个参数的分类函数中进行逻辑检查,我收到了这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我正在寻找的是一种通过值捕获第二个参数值的方法,就像lambda x:按值捕获第一个参数值。
答案 0 :(得分:1)
假设您想要逐行执行此操作,以下操作应该有效:
df['PageCLass'] = (df['PageClass'] + df['Rev'].apply(str)).apply(lambda x: PageClassify.page_classify(x))
在这里,您只需将两个数据帧列连接在一起,然后就可以将该函数应用于新列中的每一行。如果你需要检查PageClass和Rev的值作为单独的参数,你还可以在连接中添加一个分隔符(例如'\ t'),然后简单地在函数内部拆分:
df['PageCLass'] = (df['PageClass'] + '\t' + df['Rev'].apply(str)).apply(lambda x: PageClassify.page_classify(x))
希望这有帮助!
答案 1 :(得分:1)
上面的方法是可以的,我猜它是否有效......在我看来,它没有回答这个问题,因为你将两个参数连成一个。
这样做的一种方法是允许你传递两个参数来应用:
df['PageCLass'] = df[['PageClass','Rev']].apply(lambda x: PageClassify.page_classify(*x), axis=1)
我不知道page_classify方法是什么样的,但如果它需要两个参数,则上述应该有效。这对你有用吗?