How do I add multiple empty columns to a DataFrame
from a list?
I can do:
df["B"] = None df["C"] = None df["D"] = None
But I can't do:
df[["B", "C", "D"]] = None
KeyError: "['B' 'C' 'D'] not in index"
There are multiple ways to add a new empty/blank column (single or multiple columns) to a pandas DataFrame by using assign operator, assign() , insert() and apply() methods. By using these you can add one or multiple empty columns with either NaN , None , Blank or Empty string values to all cells.
Add Empty Column to Pandas You can add an empty column to the pandas dataframe using the = operator and assign null values to the column. What is this? An empty column will be added at the end of the dataframe with the column header Empty_Column. You can also add a column with nan values.
First, create an empty dataframe using pd. Dataframe() . Next, you can append a column to the created dataframe using the insert() method. To know more about other methods available to add columns to the dataframe, refer to add column to dataframe tutorial.
You could use df.reindex
to add new columns:
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
will return a new DataFrame, with columns appearing in the order they are listed:
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
The reindex
method as a fill_value
parameter as well:
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
I'd concat
using a 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: []
So by passing a list containing your original df, and a new one with the columns you wish to add, this will return a new df with the additional columns.
Caveat: See the discussion of performance in the other answers and/or the comment discussions. reindex
may be preferable where performance is critical.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With