如何从列表中向DataFrame添加多个空列?
我能做到:
df["B"] = None
df["C"] = None
df["D"] = None但我做不到:
df[["B", "C", "D"]] = None
KeyError: "['B' 'C' 'D'] not in index"
发布于 2015-06-18 22:13:41
我会使用concat使用DataFrame:
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可能更好。
发布于 2015-06-19 17:00:52
您可以使用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 NaNreindex将返回一个新的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 6reindex方法也作为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发布于 2017-07-06 14:11:58
如果不想重写旧列的名称,那么可以使用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而且,如果已经有一个具有列名的list,那么:
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 0https://stackoverflow.com/questions/30926670
复制相似问题