简介
pandas提供了一套合并数据集操作的方法:
pandas.merge()可根据一个或者多个键将不同的DataFrame连接在一起,类似于SQL数据库中的合并操作;
pandas.concat()可以沿某个轴将多个数据集连接在一起。
接下来将分别对这两种方法进行介绍。
merge()函数
merge()函数中的参数如下:
参数
描述
left
参与合并到左侧DataFrame
right
参与合并到右侧DataFrame
how
合并方式(‘inner’、‘outer’、‘left’、‘right’)其中之一,默认为‘inner’
on
用于连接的列名。未指定则使用两列的交集作为连接键
left_on
左侧DataFrame中用作连接键的列
right_on
右侧DataFrame中用作连接键的列
left_index
将左侧的行索引用作连接键
right_index
将右侧的行索引用作连接键
sort
对合并后的数据进行排序,默认为True
suffixes
用于追加到重叠列名的末尾。例如,左右两个DataFrame都有‘data’列,则结果中就会出现‘data_x’和‘data_y’
copy
默认总是复制
以一个例子开始:
>>>import numpy as np
>>>import pandas as pd
>>>df1 = pd.DataFrame({'data1': np.arange(7), 'name': list('bbbaacd')})
>>>df1
data1 name
0 0 b
1 1 b
2 2 b
3 3 a
4 4 a
5 5 c
6 6 d
>>>df2 = pd.DataFrame({'data2': [0, 2, 4], 'name': ['a', 'b', 'c']})
>>>df2
data2 name
0 0 a
1 2 b
2 4 c
>>>pd.merge(df1, df2)
data1 name data2
0 0 b 2
1 1 b 2
2 2 b 2
3 3 a 0
4 4 a 0
5 5 c 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>>>importnumpyasnp
>>>importpandasaspd
>>>df1=pd.DataFrame({'data1':np.arange(7),'name':list('bbbaacd')})
>>>df1
data1name
00b
11b
22b
33a
44a
55c
66d
>>>df2=pd.DataFrame({'data2':[0,2,4],'name':['a','b','c']})
>>>df2
data2name
00a
12b
24c
>>>pd.merge(df1,df2)
data1namedata2
00b2
11b2
22b2
33a0
44a0
55c4
在这个例子中,默认使用两个DataFrame的交集作为合并键,也就是'name'列。这是多对一的合并,也就是说df1中有多个重复值与df2中一个值合并(2个’a’对一个’a’,3个’b’对一个’b’)。默认是'inner'的方式,只要两者都有的值才合并(’a’, ‘b’, ‘c’),还可以使用其他的合并方式:
# 并集合并
>>>pd.merge(df1, df2, how='outer')
data1 name data2
0 0 b 2.0
1 1 b 2.0
2 2 b 2.0
3 3 a 0.0
4 4 a 0.0
5 5 c 4.0
6 6 d NaN
# 左合并
>>>pd.merge(df1, df2, how='left')
data1 name data2
0 0 b 2.0
1 1 b 2.0
2 2 b 2.0
3 3 a 0.0
4 4 a 0.0
5 5 c 4.0
6 6 d NaN
# 右合并
>>>pd.merge(df1, df2, how='right')
data1 name data2
0 0 b 2
1 1 b 2
2 2 b 2
3 3 a 0
4 4 a 0
5 5 c 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30