Pandas Python:如何从列表中创建多个列

问题描述 投票:-1回答:6

我有一个列表,其中包含要创建的列:

new_cols = ['new_1', 'new_2', 'new_3']

我想在数据框中创建这些列并用零填充它们:

df[new_cols] = 0

得到错误:

"['new_1', 'new_2', 'new_3'] not in index"

这是真的但不幸,因为我想创造它们......

编辑:这是这个问题的重复:Pandas: Add multiple empty columns to DataFrame但是我也保留了这个,因为这里接受的答案是我正在寻找的简单解决方案,而且他不接受那里的答案

python pandas dataframe
6个回答
2
投票

您需要逐个添加列。

for col in new_cols:
    df[col] = 0

另请参阅here中的答案以了解其他方法。


0
投票

在创建列之前尝试循环遍历列名:

for col in new_cols:
    df[col] = 0

0
投票

通过字典使用assign

df = pd.DataFrame({
    'A': ['a','a','a','a','b','b','b','c','d'],
    'B': list(range(9))
})
print (df)
0  a  0
1  a  1
2  a  2
3  a  3
4  b  4
5  b  5
6  b  6
7  c  7
8  d  8

new_cols = ['new_1', 'new_2', 'new_3']
df = df.assign(**dict.fromkeys(new_cols, 0))
print (df)
   A  B  new_1  new_2  new_3
0  a  0      0      0      0
1  a  1      0      0      0
2  a  2      0      0      0
3  a  3      0      0      0
4  b  4      0      0      0
5  b  5      0      0      0
6  b  6      0      0      0
7  c  7      0      0      0
8  d  8      0      0      0

0
投票

你可以使用assign

new_cols = ['new_1', 'new_2', 'new_3']
values = [0, 0, 0]   # could be anything, also pd.Series

df = df.assign(**dict(zip(new_cols, values)

0
投票
import pandas as pd

new_cols = ['new_1', 'new_2', 'new_3']
df = pd.DataFrame.from_records([(0, 0, 0)], columns=new_cols)

这是你在找什么?


0
投票

我们可以使用Apply函数循环遍历数据框中的列,并将每个元素分配给一个新字段,例如,对于具有名为keys的列表的数据框中的列表。

[10,20,30]

在你的情况下,因为它全部为0,我们可以直接将它们分配为0而不是循环。但如果我们有价值观,我们可以填写如下......

df['new_01']=df['keys'].apply(lambda x: x[0])
df['new_02']=df['keys'].apply(lambda x: x[1])
df['new_03']=df['keys'].apply(lambda x: x[2])
© www.soinside.com 2019 - 2024. All rights reserved.