4-Pandas数据预处理之数据合并与轴向连接(pd.concat()的详解)

  数据合并:由于数据可能是不同的格式,且来自不同的数据源,为了方便之后的处理与加工,需要将不同的数据转换成一个DataFrame。

  Numpy中的concatenate()、vstack()、hstack()可对数组进行拼接,可参考学习。

  Pandas提供了pd.concat()pd.merge()join()combine_first()等函数对Pandas数据对象进行合并。

 

在本节中,仅对pd.concat()进行详细讲解。

pd.concat()常用的参数
参数 说明
objs 需连接的对象的列表
axis 轴向连接所沿的轴,默认为0
ignore_index 默认False,当为True时表示不适用连接轴上的索引值,生成的轴标记为0...n-1
keys 序列,默认为None。构建层次化索引,且该索引位于最外层
join 值为'inner'或'outer'(默认'outer')。指定处理其他轴上的索引(并集或交集)
join_axes 指定其他轴上的索引,不执行并集或交集运算

 

 

 

 

 

 

 

 

 

 

(1)默认连接两个DataFrame对象(默认axis = 0,即上下连接)

>>> import pandas as pd
>>> df1 = pd.DataFrame({'姓名':['钱某','段某'],'年龄':[20,24]},index=[2,3])
>>> df2 = pd.DataFrame({'姓名':['钱某','段某'],'年龄':[20,24]},index=[2,3])
>>> df1
   姓名  年龄
2  钱某  20
3  段某  24
>>> df2
   姓名  年龄
2  钱某  20
3  段某  24

#连接两个对象
>>> pd.concat([df1,df2])
   姓名  年龄
2  钱某  20
3  段某  24
2  钱某  20
3  段某  24

(2)左右连接两个DataFrame对象

>>> df1 = pd.DataFrame({'年龄':[22,26],'籍贯':['北京','河北']},index=['张某','李某'])
>>> df2 = pd.DataFrame({'身高':[175,180],'体重':[70,85]},index=['张某','李某'])
>>> df1
    年龄  籍贯
张某  22  北京
李某  26  河北
>>> df2
     身高  体重
张某  175  70
李某  180  85

#左右连接
>>> pd.concat([df1,df2],axis=1)
    年龄  籍贯   身高  体重
张某  22  北京  175  70
李某  26  河北  180  85

(3)验证ignore_index参数,即将连接后的列名转化为0...n-1

>>> pd.concat([df1,df2],axis=1,ignore_index=True)
     0   1    2   3
张某  22  北京  175  70
李某  26  河北  180  85

 (4)验证keys参数,即构建层次化索引

>>> pd.concat([df1,df2],axis=1,keys=['df1','df2'])
   df1      df2
    年龄  籍贯   身高  体重
张某  22  北京  175  70
李某  26  河北  180  85

(5)验证join参数,默认 join = 'outer' ,取并集,不会造成信息的缺失

>>> df3 = pd.DataFrame({'身高':[175,183],'体重':[70,87]},index=['张某','钱某'])
>>> df3
     身高  体重
张某  175  70
钱某  183  87

#取并集
>>> pd.concat([df1,df3],axis=1)
      年龄   籍贯     身高    体重
张某  22.0   北京  175.0  70.0
李某  26.0   河北    NaN   NaN
钱某   NaN  NaN  183.0  87.0

#取交集
>>> pd.concat([df1,df3],axis=1,join='inner')
    年龄  籍贯   身高  体重
张某  22  北京  175  70

(6)验证join_axes参数,若只想重用原始DataFrame中的索引,则项 join_axes 传入一个索引对象列表

>>> pd.concat([df1,df3],axis=1)
      年龄   籍贯     身高    体重
张某  22.0   北京  175.0  70.0
李某  26.0   河北    NaN   NaN
钱某   NaN  NaN  183.0  87.0

>>> pd.concat([df1,df3],axis=1,join_axes=[df1.index])
    年龄  籍贯     身高    体重
张某  22  北京  175.0  70.0
李某  26  河北    NaN   NaN
posted @ 2020-07-29 10:12  大脸猫12581  阅读(590)  评论(0编辑  收藏  举报