当可能的值为 bool 和 NaN 时,避免使用 pandas FutureWarning object-dtype 列使用全 bool 值

Fra*_*ans 5 python pandas

我有大约 100 万个 pandas 数据框,包含 0-10,000 行和 160 列。在数据框中,5-10 列可能具有值 [False、True、np.nan],并且是“object”或“bool”dtype。某些“对象”数据类型列仅包含 True 或 False。我处理所有这些列就好像它们可以包含 [False, True, np.nan],所以没有df.loc[df['col']]butdf.loc[df['col'] == True]等。

当我对这些帧的集合进行 concat 时,有时我会得到In a future version, object-dtype columns with all-bool value will not be include induction with bool_only=True。显式转换为 bool dtype。

下面的两个 concat 都会触发警告,因为 df2 有一个带有 dtype 对象的 bool-only 列:

df1 = pd.DataFrame({'foo': np.zeros((2, ), dtype='bool')}, index=[0,1])
df2 = pd.DataFrame({'foo': np.ones((2, ), dtype='bool').astype('object')}, index=[2,3])
df3 = pd.DataFrame({'foo': np.array([np.nan, np.nan])}, index=[6,7])

df_ = pd.concat([df1, df2])
df_ = pd.concat([df2, df3])
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 处理此问题的适当方法是df = df.infer_objects(),还是将列转换为分类会更好?我的两个对象列是图像缩略图,但我假设列中的数据量对速度没有影响。

  2. 为什么连接时会收到此警告?在pandas 1.5.0 发行说明中,此更改被描述为已弃用将 DataFrame.any() 和 DataFrame.all() 中的所有 bool 对象数据类型列视为 bool-like 且 bool_only=True,而是显式转换为 bool ( GH46188)。concat如何使用any()/all()?

熊猫1.5.2,蟒蛇3.8.15

与 pandas 中的 Bool 和缺失值略有相关