pandas入门——数据合并concat函数

时间:2022-06-26 15:46:55

数据合并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