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

如何在 sklearn 中一次在多个列上应用预处理方法

Pandas+Python初始化一个全零的Dataframe

Pandas+Python初始化一个全零的Dataframe

Pandas系列1-DataFrame之初始化