1. 程式人生 > >pandas入門——資料合併concat函式

pandas入門——資料合併concat函式

資料合併concat函式

  • 建立資料框
# 匯入pandas與numpy包
import pandas as pd
import numpy as np

# 建立兩個index與columns有重合的資料框
df1 = pd.DataFrame(data=np.ones((5,6))*1,columns=["a","b","c","d","e","f"],index=[0,1,2,3,4])
df2 = pd.DataFrame(data=np.ones((5,6))*2,columns=["e","f","g","h","j","k"],index=[2,3,4,5,6])

print(df1)
print(df2)

    a   b   c   d   e   f
0   1.0 1.0 1.0 1.0 1.0 1.0
1   1.0 1.0 1.0 1.0 1.0 1.0
2   1.0 1.0 1.0 1.0 1.0 1.0
3   1.0 1.0 1.0 1.0 1.0 1.0
4   1.0 1.0 1.0 1.0 1.0 1.0


    e   f   g   h   j   k
2   2.0 2.0 2.0 2.0 2.0 2.0
3   2.0 2.0 2.0 2.0 2.0 2.0
4   2.0 2.0 2.0 2.0 2.0 2.0
5   2.0 2.0 2.0 2.0 2.0 2.0
6   2.0 2.0 2.0 2.0 2.0 2.0
  • 進行豎直方向的合併 並且使用的合併方式是outer
print(pd.concat(objs=[df1,df2],axis=0,join="outer"))
    a   b   c   d   e   f   g   h   j   k
0   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
1   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
3   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
4   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2   NaN NaN NaN NaN 2.0
2.0 2.0 2.0 2.0 2.0 3 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0 4 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0 5 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0 6 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
  • 進行水平方向的合併 並且使用的合併方式是outer
print(pd.concat(objs=[df1,df2],axis=1,join="outer"))

    a   b   c   d   e   f   e   f   g   h   j   k
0   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN
1   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN
2   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
3   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
4   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
5   NaN NaN NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
6   NaN NaN NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
  • 進行豎直方向的合併 並且使用的合併方式是inner
print(pd.concat(objs=[df1,df2],axis=0,join="inner"))

    e   f
0   1.0 1.0
1   1.0 1.0
2   1.0 1.0
3   1.0 1.0
4   1.0 1.0
2   2.0 2.0
3   2.0 2.0
4   2.0 2.0
5   2.0 2.0
6   2.0 2.0
  • 進行水平方向的合併 並且使用的合併方式是inner
print(pd.concat(objs=[df1,df2],axis=1,join="inner"))

    a   b   c   d   e   f   e   f   g   h   j   k
2   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
3   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
4   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
  • 以df1的索引為主進行合併 在水平方向
print(pd.concat(objs=[df1,df2],join_axes=[df1.index],axis=1))
    a   b   c   d   e   f   e   f   g   h   j   k
0   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN
1   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN
2   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
3   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
4   1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0
  • 以df1的列為主進行合併 在垂直方向
print(pd.concat(objs=[df1,df2],axis=0,join_axes=[df1.columns]))

    a   b   c   d   e   f
0   1.0 1.0 1.0 1.0 1.0 1.0
1   1.0 1.0 1.0 1.0 1.0 1.0
2   1.0 1.0 1.0 1.0 1.0 1.0
3   1.0 1.0 1.0 1.0 1.0 1.0
4   1.0 1.0 1.0 1.0 1.0 1.0
2   NaN NaN NaN NaN 2.0 2.0
3   NaN NaN NaN NaN 2.0 2.0
4   NaN NaN NaN NaN 2.0 2.0
5   NaN NaN NaN NaN 2.0 2.0
6   NaN NaN NaN NaN 2.0 2.0
  • dataframe追加資料框
print(df1.append(df2,ignore_index=True))

    a   b   c   d   e   f   g   h   j   k
0   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
1   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
3   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
4   1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2   NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
3   NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
4   NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
5   NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
6   NaN NaN NaN NaN 2.0 2.0 2.0 2.0 2.0 2.0
  • dataframe追加series
s1 = pd.Series(data=np.arange(6),index=["a","b","c","d","e","f"])
print(df1.append(s1,ignore_index=True))

    a   b   c   d   e   f
0   1.0 1.0 1.0 1.0 1.0 1.0
1   1.0 1.0 1.0 1.0 1.0 1.0
2   1.0 1.0 1.0 1.0 1.0 1.0
3   1.0 1.0 1.0 1.0 1.0 1.0
4   1.0 1.0 1.0 1.0 1.0 1.0
5   0.0 1.0 2.0 3.0 4.0 5.0