首页 > 解决方案 > Python Pandas 以系列数据为参数应用函数

问题描述

我正在使用应用函数来处理 name1 列。我可以将像 8 这样的固定值传递给函数,但我希望使用每一行的值 (num_of_bit) 来处理 name1 列。当我使用如下代码时,我会收到错误消息。我理解为什么会出现此错误,但我不知道如何实现我想要的。

def signedProcessing(input,num_of_bit):
    if input < (2**num_of_bit)/2:
        input += 256
    return input

out_df.loc[out_df['range_type'] == "SIGNED", [name1]] = out_df[out_df['range_type']=="SIGNED"][name1].apply(signedProcessing,num_of_bit=out_df[out_df['range_type'] == "SIGNED"]['num_of_bit'])

Series 的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

标签: pythonpandasapply

解决方案


如果我正确理解了这个问题并且您需要通过应用函数来更改“name1”值,其中“range_type”为“SIGNED”,那么您没有传递“num_of_bit”来应用,因此它尝试使用每行的整列。我建议使用 lambda 函数:

out_df.loc['name1'] = out_df[['name1', 'num_of_bit', 'range_type']].apply(lambda x: signedProcessing(x.name1, x.num_of_bits) if x.range_type=='SIGNED' else x.name1, axis=1)

这会将具有 'SIGNED' range_type 的每一行上的 'name1' 值更改为 signedProcessing(name1 的值,num_of_bits 的值)。如果 range_type 是别的东西,它不会改变 name1 的值。


推荐阅读