Pandas一次初始化多个列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas一次初始化多个列相关的知识,希望对你有一定的参考价值。
我有一个数据帧,我需要在其中创建两个(或更多)新列,这两个列都初始化为零。这就是我要到达那里 -
import pandas as pd
df = pd.DataFrame('value': 0: 0.6, 1: 0.5, 2: -0.7, 3: 0.6, 4: 0.7, 5: -0.7, 6: 0.9, 7: 0.5, 8: -0.6, 9: 0.5, 10: 0.6, 11: -0.5, 12: 0.5, 13: -0.6, '_bare_nuclei': 0: 1, 1: 1, 2: 1, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, '_bland_chromatin': 0: 0, 1: 0, 2: 0, 3: 1, 4: 1, 5: 1, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, '_cell_shape_uniformity': 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 1, 7: 1, 8: 1, 9: 1, 10: 0, 11: 0, 12: 0, 13: 0, '_cell_size_uniformity': 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 1, 11: 1, 12: 1, 13: 0, '_clump_thickness': 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 1)
new_cols = ['_normal_nucleoli', '_epithelial_cell_size', '_mitoses']
df.loc[:,new_cols] = 0
我认为这会起作用并给我想要的结果。但是我收到以下错误。
KeyError: "['_normal_nucleoli' '_epithelial_cell_size' '_mitoses'] not in index"
它说这些密钥不存在于index
中。我不明白这一部分。为什么错误说index
?我在这里访问columns
。
但是,更重要的是,如何在不使用循环的情况下创建多个列。我知道我可以使用 - 创建新列
for each_new_col in new_cols:
df.loc[:,each_new_col] = 0
或者通过使用df.assign
但是有没有更简单的方法(没有循环等)来实现这一目标?
答案
你可以很容易地在这里使用assign
(没有循环):
df = df.assign(**dict.fromkeys(new_cols, 0))
哪里,
print(dict.fromkeys(new_cols, 0))
'_epithelial_cell_size': 0, '_mitoses': 0, '_normal_nucleoli': 0
在将字典传递给assign
时,您需要解压缩字典,因为该函数仅接受关键字参数。
另一答案
如果新列的顺序很重要,请使用join
:
df = df.join(pd.DataFrame(0, columns=new_cols, index=df.index))
以上是关于Pandas一次初始化多个列的主要内容,如果未能解决你的问题,请参考以下文章
Python:一次包含重复值的多个列的 Pandas 数据透视表
Pandas+Python初始化一个全零的Dataframe