首页 > 解决方案 > 将熊猫升级到 1.03 后,熊猫因空数据框而失败是错误还是功能?(TypeError:无法使用 dtyped 执行“rand_”)

问题描述

我有点困惑,熊猫的一些简洁功能(在此示例中处理空数据框)不再受支持,或者是否有更深层次的理由删除这些功能。这是一个工作玩具示例

import pandas as pd
df = pd.DataFrame({'a': [1]})
mask = (df.a > 0) & df.apply(lambda row: row.a > 0, axis=1)]
print(df[mask])

✅ 工作正常

>   a
> 0 1

但是 3 个字母更改失败:

df = pd.DataFrame({'a': [1]})[:0]
mask = (df.a > 0) & df.apply(lambda row: row.a > 0, axis=1)

❌<code>TypeError: 无法使用 dtyped [int64] 数组和 [float] 类型的标量执行“rand_”

这在早期的 pandas 2.5 中不是问题

由于此处只有一列,因此更改类型无济于事。问题当然部分是由于当 f(any) 函数应用于空 df 时 panda 返回数据帧本身。

评论:这个例子非常愚蠢,因为两个过滤器都在做同样的事情,但我不知道除了通过lambda函数之外应用复杂过滤器(具有跨多个列的逻辑)的好方法。

标签: pythonpandasdataframelambda

解决方案


推荐阅读