gpt4 book ai didi

python - 基于具有默认值的形状创建 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:35 25 4
gpt4 key购买 nike

我有一个接收 df 的函数。我试图让它返回具有相同形状但默认值的 df(在我的示例中为 True)。

有时我会得到一个系列作为 df(只有一个 col)。

我设法找到了一个系列的东西:

def func(df):
return pd.Series([True for i in range(df.shape[0])])

我还为 df 管理了一个:

def func(df):
return df.apply(lambda x: True)

但这看起来资源太多了,我正试图找到一种快速而优雅的方法来实现这一点。

最佳答案

编辑 3:为一些已发布的答案添加 %timeit

样本:

n = np.arange(900000).reshape(300000, 3)
df = pd.DataFrame(n, columns = list('abc'))

%timeit 结果:

In [19]: %timeit pd.DataFrame().reindex_like(df).fillna(True)
336 ms ± 13.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [20]: %timeit ~df.eq(np.nan)
2.7 ms ± 175 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [21]: %timeit df.where(df.isna()).fillna(True)
332 ms ± 11.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [22]: %%timeit
...: df1=df.copy()
...: df1[:]=True
...:
7.39 ms ± 339 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

所以,~df.eq(np.nan) 是最快的


编辑 2: 使用“NaN”的特殊功能添加另一个方法,即 NaN == NaN 返回 False。因此,将整个 dfNaN 进行比较。它将返回所有 False。然后,使用否定运算符 '~' 将所有内容变为 True

~df.eq(np.nan)

Out[1386]:
a b c
0 True True True
1 True True True
2 True True True

编辑:(添加解释)

关于 df.where 的文件和 series.where

df.isnaNaN 上返回 True,在 non-NaN 上返回 False >。我使用 df.isna 创建一个 bool 掩码以与 .where 一起使用。在掩码 True 上,.where 保持相同的值,即 NaN。在掩码 False 上,.where 替换为 replaced-value。我没有指定 replaced-value,所以 .where 默认为 NaN

这意味着整个df 将转向所有NaN,无论它有什么值。最后,fillnaTrue

此方法适用于数据框和系列


IIUC,您想从当前 df 生成一个 new_df,其中所有值都变为 True。如果是这种情况,则不需要功能。

下面的简单方法应该可行:

示例数据:

df:
a b c
0 0 1 2
1 3 4 5
2 6 7 8

df.where(df.isna()).fillna(True)

Out[1374]:
a b c
0 True True True
1 True True True
2 True True True

关于python - 基于具有默认值的形状创建 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56413177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com