gpt4 book ai didi

python - 为什么使用 pandas.assign 而不是简单地初始化新列?

转载 作者:太空狗 更新时间:2023-10-29 21:25:26 27 4
gpt4 key购买 nike

我刚刚发现了 pandas 数据帧的 assign 方法,它看起来不错并且与 R 中 dplyr 的 mutate 非常相似。但是,我总是通过“即时”初始化一个新列。 assign 更好的原因是什么?

例如(基于 pandas 文档中的示例),要在数据框中创建一个新列,我可以这样做:

df = DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
df['ln_A'] = np.log(df['A'])

但是 pandas.DataFrame.assign 文档建议这样做:

df.assign(ln_A = lambda x: np.log(x.A))
# or
newcol = np.log(df['A'])
df.assign(ln_A=newcol)

两种方法都返回相同的数据帧。事实上,第一种方法(我的“即时”分配)比 .assign 方法(1000 次迭代 0.353 秒)快得多(1000 次迭代 0.202 秒)。

那么我应该停止使用我的旧方法以支持 df.assign 的原因吗?

最佳答案

区别在于您是希望修改现有框架,还是创建新框架同时保持原始框架不变。

特别是,DataFrame.assign 返回一个对象,该对象具有原始数据的副本以及请求的更改...原始帧保持不变不变

在您的特定情况下:

>>> df = DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})

现在假设您希望创建一个新框架,其中 A 到处都是 1 而不会破坏 df。然后你可以使用 .assign

>>> new_df = df.assign(A=1)

如果您不想保持原始值,那么显然 df["A"] = 1 会更合适。这也解释了速度差异,.assign 必须复制数据,而 [...] 则不需要。

关于python - 为什么使用 pandas.assign 而不是简单地初始化新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177914/

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