DataFrame数据的合并、连接(concat、merge、join)
一、concat:沿着一条轴,将多个对象合并到一起 concat方法相当于数据库中的全连接 union all,它可以指定联接的方式( out join 或 inner join),还可以指定按照某个轴进行连接, 与数据库不同的是,它不会去重,但是可以使用drop_duplicates方法达到去重的效果。
pd.concat()只是单纯的把两个表拼接在一起,参数axis是关键,用于指定是行还是列。
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'水果':['苹果','梨','草莓'],'数量':[4,5,6]},index=[1,2,3])
df1
水果 | 数量 | |
---|---|---|
1 | 苹果 | 4 |
2 | 梨 | 5 |
3 | 草莓 | 6 |
df2=pd.DataFrame({'水果':['苹果','梨','草莓','葡萄'],'价格':[10.2,23.4,33.56,9.9]},index=[1,2,3,4])
df2
水果 | 价格 | |
---|---|---|
1 | 苹果 | 10.20 |
2 | 梨 | 23.40 |
3 | 草莓 | 33.56 |
4 | 葡萄 | 9.90 |
# axis 连接的轴向, 0,表格向下, 1 ,表格向右
pd.concat([df1,df2],axis=1)
pd.concat([df1,df2],axis=0)
价格 | 数量 | 水果 | |
---|---|---|---|
1 | NaN | 4.0 | 苹果 |
2 | NaN | 5.0 | 梨 |
3 | NaN | 6.0 | 草莓 |
1 | 10.20 | NaN | 苹果 |
2 | 23.40 | NaN | 梨 |
3 | 33.56 | NaN | 草莓 |
4 | 9.90 | NaN | 葡萄 |
# ignore_index=True 重建索引
pd.concat([df1,df2],axis=0,ignore_index=True)
价格 | 数量 | 水果 | |
---|---|---|---|
0 | NaN | 4.0 | 苹果 |
1 | NaN | 5.0 | 梨 |
2 | NaN | 6.0 | 草莓 |
3 | 10.20 | NaN | 苹果 |
4 | 23.40 | NaN | 梨 |
5 | 33.56 | NaN | 草莓 |
6 | 9.90 | NaN | 葡萄 |
# 内连接
pd.concat([df1,df2],axis=1,join='inner',keys='水果')
水果 | 数量 | 水果 | 价格 | |
---|---|---|---|---|
1 | 苹果 | 4 | 苹果 | 10.20 |
2 | 梨 | 5 | 梨 | 23.40 |
3 | 草莓 | 6 | 草莓 | 33.56 |
# 外连接
pd.concat([df1,df2],axis=1,join='outer',keys='水果')
水果 | 数量 | 水果 | 价格 | |
---|---|---|---|---|
1 | 苹果 | 4.0 | 苹果 | 10.20 |
2 | 梨 | 5.0 | 梨 | 23.40 |
3 | 草莓 | 6.0 | 草莓 | 33.56 |
4 | NaN | NaN | 葡萄 | 9.90 |