【发布时间】:2022-01-18 12:26:02
【问题描述】:
给定以下 DF:
df = pd.DataFrame(data=np.random.randint(1,10,size=(10,4)),columns=list("abcd"),dtype=np.int64)
假设我想用两个 numpy 数组的列表更新前两列(具有特定的 dtype:例如 np.int8 和 np.float32)--> update_vals = [np.arange(1,11,dtype=np.int8),np.ones(10,dtype=np.float32)]
我可以执行以下操作:df[["a","b"]] = pd.DataFrame(dict(zip(list("ab"),update_vals)))
Column Dtypes 的预期结果:
- 一个:np.int8
- b=np.float32
- [c,d]=np.int64
是否有更快的方法来做到这一点?
【问题讨论】:
-
嗨,你在 StackOverflow 上,如果你可以让它工作但你想要更好的性能,你应该使用codereview.stackexchange.com
-
如果所有列都具有相同的 dtype,例如 float,则数据帧可以将所有列存储在 (n,4) 数组中,但是当 dtype 不同时,底层存储将为每个 dtype 提供单独的数组,如果不是每一列(系列)。并且对 2 个数组的任何无循环操作都需要将它们转换为一个具有统一 dtype 的数组。由于更改 dtype 似乎是您的首要任务,因此您必须以某种方式分别处理每个数组/列。
标签: python pandas dataframe numpy