244

I have a initial dataframe D. I extract two data frames from it like this:

A = D[D.label == k]
B = D[D.label != k]

I want to combine A and B into one DataFrame. The order of the data is not important. However, when we sample A and B from D, they retain their indexes from D.

2
  • Does this answer your question? Pandas Merging 101 Commented Nov 2, 2020 at 14:41
  • From pandas v1.4.1: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. Commented Apr 28, 2022 at 17:06

9 Answers 9

258

DEPRECATED: DataFrame.append and Series.append were deprecated in v1.4.0.


Use append:

df_merged = df1.append(df2, ignore_index=True)

And to keep their indexes, set ignore_index=False.

3
  • 2
    This works. It creates a new DataFrame though. Is there a way to do it inline? That would be nice for when I'm loading huge amounts of data from a database in batches so I could iteratively update the DataFrame without creating a copy each time.
    – Andrew
    Commented Nov 5, 2013 at 17:36
  • 1
    Yes, that's possible, see: stackoverflow.com/a/46661368/5717580 Commented Oct 10, 2017 at 7:55
  • 10
    From pandas v1.4.1: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. Commented Apr 28, 2022 at 17:06
237

Use pd.concat to join multiple dataframes:

df_merged = pd.concat([df1, df2], ignore_index=True, sort=False)
1
  • 2
    I want to use this, but I'm trying to concatenate two columns of the same name o_O Commented Apr 1, 2020 at 2:13
103

Merge across rows:

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

Merge across columns:

df_col_merged = pd.concat([df_a, df_b], axis=1)
0
39

If you're working with big data and need to concatenate multiple datasets calling concat many times can get performance-intensive.

If you don't want to create a new df each time, you can instead aggregate the changes and call concat only once:

frames = [df_A, df_B]  # Or perform operations on the DFs
result = pd.concat(frames)

This is pointed out in the pandas docs under concatenating objects at the bottom of the section):

Note: It is worth noting however, that concat (and therefore append) makes a full copy of the data, and that constantly reusing this function can create a significant performance hit. If you need to use the operation over several datasets, use a list comprehension.

0
7

If you want to update/replace the values of first dataframe df1 with the values of second dataframe df2. you can do it by following steps —

Step 1: Set index of the first dataframe (df1)

df1.set_index('id')

Step 2: Set index of the second dataframe (df2)

df2.set_index('id')

and finally update the dataframe using the following snippet —

df1.update(df2)
3

To join 2 pandas dataframes by column, using their indices as the join key, you can do this:

both = a.join(b)

And if you want to join multiple DataFrames, Series, or a mixture of them, by their index, just put them in a list, e.g.,:

everything = a.join([b, c, d])

See the pandas docs for DataFrame.join().

3

Both the dataframe should have same column name else instead of appending records by row wise, it will append as separate columns.

df = df.append(df1,ignore_index=True)
df = pd.concat([df1,df2], ignore_index=True)
1
# collect excel content into list of dataframes
data = []
for excel_file in excel_files:
    data.append(pd.read_excel(excel_file, engine="openpyxl"))

# concatenate dataframes horizontally
df = pd.concat(data, axis=1)
# save combined data to excel
df.to_excel(excelAutoNamed, index=False)

You can try the above when you are appending horizontally! Hope this helps sum1

0

Use this code to attach two Pandas Data Frames horizontally:

df3 = pd.concat([df1, df2],axis=1, ignore_index=True, sort=False)

You must specify around what axis you intend to merge two frames.

Not the answer you're looking for? Browse other questions tagged or ask your own question.