Reputation: 14724
Is it possible to append to an empty data frame that doesn't contain any indices or columns?
I have tried to do this, but keep getting an empty dataframe at the end.
e.g.
import pandas as pd
df = pd.DataFrame()
data = ['some kind of data here' --> I have checked the type already, and it is a dataframe]
df.append(data)
The result looks like this:
Empty DataFrame
Columns: []
Index: []
Upvotes: 331
Views: 645963
Reputation: 403128
Why am I getting "AttributeError: 'DataFrame' object has no attribute 'append'?
append
has been removed, use pd.concat
instead.The idiomatic way to append DataFrames (it to collect all your smaller DataFrames into a list, and then make one single call to pd.concat
.
df_list = []
for df in some_function_that_yields_df():
df_list.append(df)
big_df = pd.concat(df_list)
The rationale for its removal was to discourage iteratively growing DataFrames in a loop (which is what people typically use append for). This is because append makes a new copy at each stage, resulting in quadratic complexity in memory. See Creating an empty Pandas DataFrame, and then filling it (in particular, this answer) where answers discourage iteratively growing DataFrames.
More info:
Upvotes: 2
Reputation: 353499
This should work:
>>> df = pd.DataFrame()
>>> data = pd.DataFrame({"A": range(3)})
>>> df = df.append(data)
>>> df
A
0 0
1 1
2 2
Since the append
doesn't happen in-place, so you'll have to store the output if you want it:
>>> df = pd.DataFrame()
>>> data = pd.DataFrame({"A": range(3)})
>>> df.append(data) # without storing
>>> df
Empty DataFrame
Columns: []
Index: []
>>> df = df.append(data)
>>> df
A
0 0
1 1
2 2
Upvotes: 546
Reputation: 553
The answers are very useful, but since pandas.DataFrame.append
was deprecated (as already mentioned by various users), and the answers using pandas.concat
are not "Runnable Code Snippets" I would like to add the following snippet:
import pandas as pd
df = pd.DataFrame(columns =['name','age'])
row_to_append = pd.DataFrame([{'name':"Alice", 'age':"25"},{'name':"Bob", 'age':"32"}])
df = pd.concat([df,row_to_append])
So df
is now:
name age
0 Alice 25
1 Bob 32
Upvotes: 26
Reputation: 19922
pandas.DataFrame.append
Deprecated since version 1.4.0: Useconcat()
instead.
Therefore:
df = pd.DataFrame() # empty dataframe
df2 = pd..DataFrame(...) # some dataframe with data
df = pd.concat([df, df2])
Upvotes: 8
Reputation: 786
You can concat the data in this way:
InfoDF = pd.DataFrame()
tempDF = pd.DataFrame(rows,columns=['id','min_date'])
InfoDF = pd.concat([InfoDF,tempDF])
Upvotes: 50
Reputation: 3289
And if you want to add a row, you can use a dictionary:
df = pd.DataFrame()
df = df.append({'name': 'Zed', 'age': 9, 'height': 2}, ignore_index=True)
which gives you:
age height name
0 9 2 Zed
Upvotes: 135