将列表中具有零值的多个列添加到 Pandas 数据框中

Posted

技术标签:

【中文标题】将列表中具有零值的多个列添加到 Pandas 数据框中【英文标题】:Add multiple columns with zero values from a list to a Pandas data frame 【发布时间】:2016-04-12 14:24:30 【问题描述】:

假设我有一个数据框

id col1 col2
1  1    foo
2  1    bar

还有一个列名列表

l = ['col3', 'col4', 'col5']

如何向数据框中添加值为零的新列?

id col1 col2 col3 col4 col5
1  1    foo     0    0    0
2  1    bar     0    0    0

【问题讨论】:

【参考方案1】:

您可以尝试直接分配(假设您的数据框名为 df):

for col in l:
    df[col] = 0

或者使用 DataFrame 的 assign 方法,如果 l 可以包含一个值、一个数组或任何 pandas Series 构造函数,这是一种更简洁的方法。

# create a dictionary of column names and the value you want
d = dict.fromkeys(l, 0)
df.assign(**d)

关于 assign 方法的 Pandas 文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.assign.html

【讨论】:

您的d 可以更简单地写成dict.fromkeys(l, 0)。 (但警告:由于我们使用的是字典,因此不能保证顺序是 l 的顺序。) 谢谢!添加了更改。 您将如何强制该列的 dtype 是 int32 而不是 float64?我试过df[col] = int(0),还用astype(int) 转换了整个列,但没有用 这很奇怪,做df[col] = df[col].astype(col: "int32")应该就够了@它会有助于发布一个可重现的例子。 用字典赋值的例子解释***.com/questions/42101382/…

以上是关于将列表中具有零值的多个列添加到 Pandas 数据框中的主要内容,如果未能解决你的问题,请参考以下文章

从字典中添加具有映射值的新熊猫列[重复]

python pandas将数据框转换为具有多个值的字典

如何使用具有多个源列的 pandas_udf 将多个列添加到 pyspark DF?

一次在多列上使用 pandas groupby().apply(list) [重复]

如何排除具有零值的元素-XSLT?

将多个火花数据框列转换为具有列表类型的单列