gpt4 book ai didi

python - 哪个更好? np.where 或 .loc?

转载 作者:行者123 更新时间:2023-11-28 17:59:42 28 4
gpt4 key购买 nike

我发现了两种根据条件替换数据框某些值的形式:

  1. .loc
mask = df['param'].isnull()
df.loc[mask, 'param'] = 'new_value'
  1. np.where()
mask = df['param'].isnull()
df['param'] = np.where(mask, 'new_value', df['param'])


两种形式都很好,但哪种形式更受青睐?关于这个问题,我什么时候应该使用 .loc 什么时候使用 np.where

最佳答案

好吧,这不是一个完整的测试,但这是一个示例。在每次运行中(locnp.where),数据都被重置为带有种子的原始随机数。

玩具数据1

这里,np.nan 多于有效值。另外,列是float类型的。

np.random.seed(1)
df = pd.DataFrame({'param': np.random.choice((1, np.nan), 1000000, p=(0.3,0.7))})

# loc
%%timeit
mask = df['param'].isnull()
df.loc[mask, 'param'] = 'new_value'
# 46.7 ms ± 177 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

# np.where
%%timeit
mask = df['param'].isnull()
df['param'] = np.where(mask, 'new_value', df['param'])
# 86.8 ms ± 2.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

玩具数据2:

此处np.nan少于有效值,列为object类型:

np.random.seed(1)
df = pd.DataFrame({'param': np.random.choice(("1", np.nan), 1000000, p=(0.7,0.3))})

同样的故事:

df.loc[mask, 'param'] = 'new_value'
# 47.8 ms ± 350 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

df['param'] = np.where(mask, 'new_value', df['param'])
# 58.9 ms ± 1.72 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

与@cs95 的评论相反,loc 似乎优于 np.where

关于python - 哪个更好? np.where 或 .loc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328494/

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