版权声明:本文为博主转载文章
原文链接:https://blog.csdn.net/jclian91/article/details/84289537
pandas中合并数据的5中方法。
盘点一下pandas中合并数据的5个函数。但是对于每个函数,具体用法大家可以参考pandas官方文档。
-
join主要用于基于索引的横向合并拼接;
-
merge主要用于基于指定列的横向合并拼接;
-
concat可用于横向和纵向合并拼接;
-
append主要用于纵向追加;
-
combine可以通过使用函数,把两个DataFrame按列进行组合。
join
join是基于索引的横向拼接,如果索引一致,直接横向拼接。如果索引不一致,则会用Nan值填充。
索引一致
-
x = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
-
'B': ['B0', 'B1', 'B2']},
-
index=[0, 1, 2])
-
y = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
-
'D': ['D0', 'D2', 'D3']},
-
index=[0, 1, 2])
-
x.join(y)
结果如下:
索引不一致
-
x = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
-
'B': ['B0', 'B1', 'B2']},
-
index=[0, 1, 2])
-
y = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
-
'D': ['D0', 'D2', 'D3']},
-
index=[1, 2, 3])
-
x.join(y)
结果如下:
merge
merge是基于指定列的横向拼接,该函数类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。
-
可以指定不同的how参数,表示连接方式,有inner内连、left左连、right右连、outer全连,默认为inner;
-
x = pd.DataFrame({'姓名': ['张三', '李四', '王五'],
-
'班级': ['一班', '二班', '三班']})
-
y = pd.DataFrame({'专业': ['统计学', '计算机', '绘画'],
-
'班级': ['一班', '三班', '四班']})
-
pd.merge(x,y,how="left")
结果如下:
pd.merge()方法索引连接,以及重复列名命名。
pd.merge()方法可以通过设置left_index或者right_index的值为True来使用索引连接,例如这里df1使用data1当连接关键字,而df2使用索引当连接关键字。
从上面可以发现两个DataFrame中都有key列,merge合并之后,pandas会自动在后面加上(_x,_y)来区分,我们也可以通过设置suffixes来设置名字。
concat
concat函数既可以用于横向拼接,也可以用于纵向拼接。
纵向拼接
-
x = pd.DataFrame([['Jack','M',40],['Tony','M',20]], columns= ['name','gender','age'])
-
y = pd.DataFrame([['Mary','F',30],['Bob','M',25]], columns= ['name','gender','age'])
-
z = pd.concat([x,y],axis=0)
-
z
结果如下:
横向拼接
-
x = pd.DataFrame({'姓名': ['张三', '李四', '王五'],
-
'班级': ['一班', '二班', '三班']})
-
y = pd.DataFrame({'专业': ['统计学', '计算机', '绘画'],
-
'班级': ['一班', '三班', '四班']})
-
z = pd.concat([x,y],axis=1)
-
z
结果如下:
append
append主要用于纵向追加数据。
-
x = pd.DataFrame([['Jack','M',40],['Tony','M',20]], columns=['name','gender','age'])
-
y = pd.DataFrame([['Mary','F',30],['Bob','M',25]], columns=['name','gender','age'])
-
x.append(y)
结果如下:
combine
conbine可以通过使用函数,把两个DataFrame按列进行组合。
-
x = pd.DataFrame({"A":[3,4],"B":[1,4]})
-
y = pd.DataFrame({"A":[1,2],"B":[5,6]})
-
x.combine(y,lambda a,b:np.where(a>b,a,b))
结果如下:
注:上述函数,用于返回对应位置上的最大值。