python - 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()。
解决方案
如果我正确理解了这个问题并且您需要通过应用函数来更改“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 的值。
推荐阅读
- c# - 当我使用 C++ Dll 中的函数时,Unity 中的运行时错误
- angular - 使用自定义数据源在 mat-table 中排序、分页和过滤?
- delphi - Delphi:TTask 似乎只有第一次慢
- apache-spark - Pyspark:将函数应用于匹配多个数据帧的分区
- firebase - 无法在本地触发 Firestore 更改
- r - 如何从数据框中的字符串中提取数字并将其放入新列中?
- android - 如何改进 Volley RequestQueue 以在连续调用之间保持 loadingIndicator 并在最后隐藏它
- windows - 在 Bash 中手动输入 Windows 路径,如何转换为 POSIX 路径?
- python - 带有正方形坐标的照片上的透明蒙版
- google-apps-script - 需要使用 YouTube Data API v3 将频道的视频填充到 Google 表格中