user11282064
user11282064

Reputation:

merge pandas dataframes vertically without losing column name using pandas


is there any way to merge 3 different dataframes vertically with different columns and index like shown in image using pandas?

df1 is first dataframe have columns 1,2,8,9 df2 is second dataframe have columns 3,4 df3 is third dataframe have columns 5,6,7

Upvotes: 1

Views: 2719

Answers (1)

Sakib Ahammed
Sakib Ahammed

Reputation: 2480

Try with :

// horizontally
pandas.concat([df1, df2, df3], axis=1)

// vertically
pandas.concat([df1, df2, df3])

For more details, you may have a look into Merge, join, concatenate and compare in pandas

Examples:

import pandas as pd

df1 = pd.DataFrame({'C1': ['1', '2', '3'], 'C2': ['a', 'b', 'c'], 'C8': ['t', 'u', 'v'], 'C3': ['w', 'x', 'y']})

print (df1)    

df2 = pd.DataFrame({'C3': ['4', '5', '6', '12'], 'C4': ['d', 'e', 'f', 's']})

print (df2)

df3 = pd.DataFrame({'C5': ['7', '8', '9', '10', '11'], 'C6': ['i', 'j', 'k', 'l', 'm'], 'C7': ['n', 'o', 'p', 'q', 'r']})

print (df3)

// horizontally
print (pd.concat([df1, df2, df3], axis=1))

// vertically
print (pd.concat([df1, df2, df3]))

Output:

//df1
 C1 C2 C8 C3
  1  a  t  w
  2  b  u  x
  3  c  v  y
//df2
   C3 C4
   4  d
   5  e
   6  f
  12  s
//df3
   C5 C6 C7
   7  i  n
   8  j  o
   9  k  p
  10  l  q
  11  m  r
// merge df1 df2 df3 horizontally
    C1   C2   C8   C3   C3   C4  C5 C6 C7
    1    a    t    w    4    d   7  i  n
    2    b    u    x    5    e   8  j  o
    3    c    v    y    6    f   9  k  p
  NaN  NaN  NaN  NaN   12    s  10  l  q
  NaN  NaN  NaN  NaN  NaN  NaN  11  m  r

// merge df1 df2 df3 vertically
    C1   C2   C8   C3   C4   C5   C6
    1    a    t    w  NaN  NaN  NaN
    2    b    u    x  NaN  NaN  NaN
    3    c    v    y  NaN  NaN  NaN
  NaN  NaN  NaN    4    d  NaN  NaN
  NaN  NaN  NaN    5    e  NaN  NaN
  NaN  NaN  NaN    6    f  NaN  NaN
  NaN  NaN  NaN   12    s  NaN  NaN
  NaN  NaN  NaN  NaN  NaN    7    i
  NaN  NaN  NaN  NaN  NaN    8    j
  NaN  NaN  NaN  NaN  NaN    9    k
  NaN  NaN  NaN  NaN  NaN   10    l
  NaN  NaN  NaN  NaN  NaN   11    m

Upvotes: 2

Related Questions