Pandas学习笔记(三) concat的使用

数据表的合并

测试数据准备

实验环境为python3.7pandas0.23.4,还有Jupyter Notebook
实验基于以下数据

import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'C': ['C0', 'C1', 'C2', 'C3'],
                     'D': ['D0', 'D1', 'D2', 'D3']},
                    index=[0, 1, 2, 3])
df2 = pd.DataFrame({'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7'],
                    'E': ['E4', 'E5', 'E6', 'E7'],},
                    index=[2,3,4,5])
  1. pd.concat

使用方式pd.concat(objs, axis=0, join='outer')
ojbs 是要合并的Series或DataFrame的列表
axis 默认为0,0代表行(竖向),1代表列(横向)
join 连接方式,默认为outer,还可以选择inner

  • axis

axis的0,1概念一开始搞不清楚的话,会让人很混乱
简单理解的话,(0,1)就好比于二维数组的(行,列)
所以0代表行,按照一行一行的方式连接两个数据框,一个数据框就代表一行,连接两个数据框,就像是往一个数据框新增一行存放另一个数据框的数据,连接多个数据框就是新增多行,新增的方向是往下的,所以是竖向的。

而1代表列,按照一列一列的方式连接两个数据框,一个数据框代表一列,连接两个数据框,就是往一个数据框新增一列,用来存放另一个数据框的数据,连接多个数据框就是新增多列,新增的方向是往右的,所以是横向的。

result1 = pd.concat([df1,df2],axis=0) 
result1
# 输出
         A	 B	 C	 D	 E 
0	A0	B0	C0	D0	NaN
1	A1	B1	C1	D1	NaN
2	A2	B2	C2	D2	NaN
3	A3	B3	C3	D3	NaN
2	NaN	B4	C4	D4	E4
3	NaN	B5	C5	D5	E5
4	NaN	B6	C6	D6	E6
5	NaN	B7	C7	D7	E7
-------------------------------------
result2 = pd.concat([df1,df2],axis=1)
result2
# 输出
        A	 B	 C	 D	 B	 C	 D	 E
0	A0	B0	C0	D0	NaN	NaN	NaN	NaN
1	A1	B1	C1	D1	NaN	NaN	NaN	NaN
2	A2	B2	C2	D2	B4	C4	D4	E4
3	A3	B3	C3	D3	B5	C5	D5	E5
4	NaN	NaN	NaN	NaN	B6	C6	D6	E6
5	NaN	NaN	NaN	NaN	B7	C7	D7	E7

可以看到,df2整个放在了df1的下面,在df1和df2的基础上,自动补上了原来没有的行列,而且自动填充了空值

  • join

join的参数有两个,默认值outer,还有inner
在我理解,outer就是求两个DataFrame的并集,而inner就是求两个DataFrame的交集

result1 = pd.concat([df1,df2],axis=0, join='outer')
result1
# 输出
        A	 B	 C	 D	 E
0	A0	B0	C0	D0	NaN
1	A1	B1	C1	D1	NaN
2	A2	B2	C2	D2	NaN
3	A3	B3	C3	D3	NaN
2	NaN	B4	C4	D4	E4
3	NaN	B5	C5	D5	E5
4	NaN	B6	C6	D6	E6
5	NaN	B7	C7	D7	E7
----------------------------------------
result3 = pd.concat([df1,df2], axis=0, join='inner')
result3
# 输出
        B	 C	 D
0	B0	C0	D0
1	B1	C1	D1
2	B2	C2	D2
3	B3	C3	D3
2	B4	C4	D4
3	B5	C5	D5
4	B6	C6	D6
5	B7	C7	D7

result1 (outer)保留了df1和df2的列所有的列
result2 (inner)只保留了df1和df2共同的列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值