我可以避免连接空数据帧的 ValueError 吗?

Posted

技术标签:

【中文标题】我可以避免连接空数据帧的 ValueError 吗?【英文标题】:Can I avoid a ValueError concatenating empty dataframes? 【发布时间】:2022-01-09 19:45:21 【问题描述】:

我有df = pd.concat(dict_of_df, axis=0),有时[很少] 字典中的所有df 可能都是空的,在这种情况下,我希望 Pandas 愉快地返回一个空数据帧。但相反,我得到了一个 ValueError。

我可以在调用 concat 之前编写一个循环来检查每个 df 的长度,但我不想总是这样做,所以目前我只是将 concat 嵌入到 try/except... 这不会真的很高兴,因为如果有一个“真正的” ValueError 我想知道它。那么我可以做一个 try/except 循环,如果抛出异常,然后计算所有的 dicts 和......呃。这太疯狂了。

还有更干净的吗?谢谢。

【问题讨论】:

你能详细说明一下吗?我正在尝试重现该问题,但无法获得ValueError;确实,我得到了一个空数据框。 天哪,你是对的。当我创建一个测试数据集时,这正是我现在正在发生的事情。 啊哈....如果 a = None, b= None,则 c = pd.concat([a,b]) 失败 【参考方案1】:

我没有这个问题:

pd.concat([pd.DataFrame()] * 3, axis=0)

你用的是什么版本的熊猫?

【讨论】:

【参考方案2】:

对不起,我要撤回这个问题。我现在意识到 pd.concat([None,None]) 产生 ValueError,而如上所述 pd.concat(pd.DataFrame(),pd.DataFrame()) 完全符合您的期望。 pd.concat([None,pd.DataFrame()]) 也很好。所以我抱怨 concat 是不公平的。我需要停止提供日常不存在的数据集!

感谢反馈

【讨论】:

以上是关于我可以避免连接空数据帧的 ValueError 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 tensorflow 中的“ValueError:空训练数据”错误

TFIDF Vectorizer 抛出 ValueError:空词汇

如何避免实体框架与空/空数据库的连接

在 python 中,使用 lambda 将空列表添加到数据框列会引发 valueError

从数据帧的每一行中提取信息而无需循环

熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)