如何将多个空列添加到DataFrame列表中的?
DataFrame
我可以:
df["B"] = None df["C"] = None df["D"] = None
但是我不能:
df[["B", "C", "D"]] = None
KeyError: "['B' 'C' 'D'] not in index"
我concat使用的是DataFrame:
concat
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在性能至关重要的情况下可能更可取。
reindex
例: 您可以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
该reindex方法也作为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