python - 如果数据框为空,熊猫应用函数(UDF)无法返回多个值
问题描述
我希望能够从 pandas UDF(应用函数)返回多个列。这很好用,只要数据框不为空!如果它是空的,它会失败:not enough values to unpack (expected 3, got 0)
。这是否被视为熊猫中的错误?还是应该强制用户在执行函数之前手动检查过滤后的数据帧的长度?或者有没有更好的方法来避免遇到这个问题?
import pandas as pd
df = pd.DataFrame({'foo':[1,2,3], 'bar':[4,5,6]})
def my_function(x):
#print(x)
# some computation
# returns multiple values (tuple)
# simplified here
return 1,1,1
df = df[df.foo > 10]
df['r1'], df['r2'], df['r3'] = zip(*df.apply(my_function, axis=1))
df
解决方案
一种解决方案是与pd.concat
结合使用result_type='expand'
。
cols = {0: 'r1', 1: 'r2', 2: 'r3'}
df = pd.concat([df, df.apply(my_function, axis=1, result_type='expand')], axis=1).rename(columns=cols)
之后您必须重命名这些列。此外,生成的空数据框重复前两列:
输出:
foo bar foo bar
相对
foo bar
两个数据框都是空的,因此您可能不感兴趣。
我认为检查 pandas 中的空数据框是一种很好的做法。所以,评论中的 Siddhants 解决方案很好。
推荐阅读
- kubernetes - 在 application.properties 中定义/附加持久性卷声明
- java - Jshell从Powershell调用时显示混乱代码
- kubernetes - ClusterIP 服务没有在 Pod 之间平均分配流量
- r - R在嵌套的for循环中附加数据帧
- flutter - 渲染库捕获的异常 A RenderFlex 在右侧溢出了 98349 像素。相关的导致错误的小部件是 AppBar
- mysql - MySQL 5.7 对未知级别的层次结构数据的递归查询
- python - 如何确定 3D DataSet 样条插值的系数
- html - 滚动时,如果没有正文内容与导航重叠,就无法使用模糊过滤器使导航栏保持粘性?
- kubernetes - kubectl rollout status - 命令何时完成?
- java - 传递数组列表
从android本机代码到反应本机中的java脚本代码的bluetoothList