Pandas一次初始化多个列

问题描述 投票:2回答:2

我有一个数据帧,我需要在其中创建两个(或更多)新列,这两个列都初始化为零。这就是我要到达那里 -

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但是有没有更简单的方法(没有循环等)来实现这一目标?

python pandas
2个回答
6
投票

你可以很容易地在这里使用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时,您需要解压缩字典,因为该函数仅接受关键字参数。


3
投票

如果新列的顺序很重要,请使用join

df = df.join(pd.DataFrame(0, columns=new_cols, index=df.index))
© www.soinside.com 2019 - 2024. All rights reserved.