首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向熊猫DataFrame添加多个空列

向熊猫DataFrame添加多个空列
EN

Stack Overflow用户
提问于 2015-06-18 22:09:43
回答 8查看 119.3K关注 0票数 112

如何从列表中向DataFrame添加多个空列?

我能做到:

代码语言:javascript
复制
    df["B"] = None
    df["C"] = None
    df["D"] = None

但我做不到:

代码语言:javascript
复制
    df[["B", "C", "D"]] = None

KeyError: "['B' 'C' 'D'] not in index"

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-06-18 22:13:41

我会使用concat使用DataFrame:

代码语言:javascript
复制
In [23]:
df = pd.DataFrame(columns=['A'])
df

Out[23]:
Empty DataFrame
Columns: [A]
Index: []

In [24]:    
pd.concat([df,pd.DataFrame(columns=list('BCD'))])

Out[24]:
Empty DataFrame
Columns: [A, B, C, D]
Index: []

因此,通过传递包含原始df的列表和希望添加的列的新列表,这将返回带有附加列的新df。

注意事项:请参阅其他answers和/或评论讨论中对性能的讨论。在性能至关重要的情况下,reindex可能更好。

票数 86
EN

Stack Overflow用户

发布于 2015-06-19 17:00:52

您可以使用df.reindex添加新列:

代码语言:javascript
复制
In [18]: df = pd.DataFrame(np.random.randint(10, size=(5,1)), columns=['A'])

In [19]: df
Out[19]: 
   A
0  4
1  7
2  0
3  7
4  6

In [20]: df.reindex(columns=list('ABCD'))
Out[20]: 
   A   B   C   D
0  4 NaN NaN NaN
1  7 NaN NaN NaN
2  0 NaN NaN NaN
3  7 NaN NaN NaN
4  6 NaN NaN NaN

reindex将返回一个新的DataFrame,列将按列出的顺序排列:

代码语言:javascript
复制
In [31]: df.reindex(columns=list('DCBA'))
Out[31]: 
    D   C   B  A
0 NaN NaN NaN  4
1 NaN NaN NaN  7
2 NaN NaN NaN  0
3 NaN NaN NaN  7
4 NaN NaN NaN  6

reindex方法也作为fill_value参数:

代码语言:javascript
复制
In [22]: df.reindex(columns=list('ABCD'), fill_value=0)
Out[22]: 
   A  B  C  D
0  4  0  0  0
1  7  0  0  0
2  0  0  0  0
3  7  0  0  0
4  6  0  0  0
票数 114
EN

Stack Overflow用户

发布于 2017-07-06 14:11:58

如果不想重写旧列的名称,那么可以使用reindex:

代码语言:javascript
复制
df.reindex(columns=[*df.columns.tolist(), 'new_column1', 'new_column2'], fill_value=0)

完整示例

代码语言:javascript
复制
In [1]: df = pd.DataFrame(np.random.randint(10, size=(3,1)), columns=['A'])

In [1]: df
Out[1]: 
   A
0  4
1  7
2  0

In [2]: df.reindex(columns=[*df.columns.tolist(), 'col1', 'col2'], fill_value=0)
Out[2]: 

   A  col1  col2
0  1     0     0
1  2     0     0

而且,如果已经有一个具有列名的list,那么:

代码语言:javascript
复制
In [3]: my_cols_list=['col1','col2']

In [4]: df.reindex(columns=[*df.columns.tolist(), *my_cols_list], fill_value=0)
Out[4]: 
   A  col1  col2
0  1     0     0
1  2     0     0
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30926670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档