python-将多个空列添加到pandas DataFrame

转自:https://www.itranslater.com/qa/details/2582599586510537728

python-将多个空列添加到pandas DataFrame
这可能是一个愚蠢的问题,但是如何将多个空列从列表添加到DataFrame?

我可以:

df[“B”] = None
df[“C”] = None
df[“D”] = None
但是我不能:

df[[“B”, “C”, “D”]] = None

KeyError: “[‘B’ ‘C’ ‘D’] not in index”
python pandas Winterflags asked 2020-02-02T14:32:28Z
4个解决方案

4个解决方案
57 votes
您可以使用df.reindex添加新列:

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,其中各列按列出的顺序显示:

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
同样将2729926327339058058176方法作为fill_value参数:

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
unutbu answered 2020-02-02T14:33:23Z
47 votes
我会使用DataFrame进行reindex的操作:

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。

警告:请参阅其他答案和/或评论讨论中有关性能的讨论。 在性能至关重要的情况下,最好选择reindex。

EdChum answered 2020-02-02T14:32:54Z
20 votes
如果您不想重写旧列的名称,则可以使用reindex:

df.reindex(columns=[*df.columns.tolist(), 'new_column1', 'new_column2'], fill_value=0)
完整示例:

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
并且,如果您已经有了包含列名称的列表,请执行以下操作:

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
toto_tico answered 2020-02-02T14:33:51Z
2 votes
为什么不使用循环:

for newcol in ['B','C','D']:
    df[newcol]=0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值