4-Pandas数据预处理之数据合并与轴向连接(pd.concat()的详解)
数据合并:由于数据可能是不同的格式,且来自不同的数据源,为了方便之后的处理与加工,需要将不同的数据转换成一个DataFrame。
Numpy中的concatenate()、vstack()、hstack()可对数组进行拼接,可参考学习。
Pandas提供了pd.concat()、pd.merge()、join()、combine_first()等函数对Pandas数据对象进行合并。
在本节中,仅对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