如果数据框为空,熊猫应用函数(UDF)无法返回多个值

Posted

技术标签:

【中文标题】如果数据框为空,熊猫应用函数(UDF)无法返回多个值【英文标题】:pandas apply function (UDF) fails to return multiple values in case the dataframe is empty 【发布时间】:2020-11-04 09:54:27 【问题描述】:

我希望能够从 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

【问题讨论】:

嗯,我不会承受这么多痛苦,我就写这样的东西df['r1'], df['r2'], df['r3'] = zip(*df.apply(my_function, axis=1)) if not df.empty else ([],[],[]) 【参考方案1】:

一种解决方案是将pd.concatresult_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 解决方案就好了。

【讨论】:

以上是关于如果数据框为空,熊猫应用函数(UDF)无法返回多个值的主要内容,如果未能解决你的问题,请参考以下文章

Rails,如果多个文本框为空,如何隐藏/显示按钮? [关闭]

Excel VBA,如果一个或多个文本框为空,如何禁用命令按钮

根据多个组合框过滤查询,但如果组合框为空,则显示所有记录,包括空,

Hive UDF 不返回预期结果

如何通过 JavaScript 使 asp 文本框为空

如何一次将函数应用于熊猫数据框中的多个列