pd.merge()
merge 是融合的意思
实例:
a=pd.DataFrame({'a':[1,2,3],'b':[2,3,4]})
b=pd.DataFrame({'a':[11,22,33],'c':[22,33,44]})
c=pd.merge(a,b)
c
Empty DataFrame
Columns: [a, b, c]
Index: []
通过验证发现,a和b的同名列表被合并,但是都是空说明默认连接形式是内连接,及二者默认把相同列名作为查找的条件,若是查找不到相同的值返回空。
加入连接条件
c=pd.merge(a,b,how='outer',on='a')
c
a b c
0 1 2.0 NaN
1 2 3.0 NaN
2 3 4.0 NaN
3 11 NaN 22.0
4 22 NaN 33.0
5 33 NaN 44.0
由此可见pd.merge与数据库的连接形式是一致的。
pd.concat
concat是连接的意思
仍然使用上面的数据
pd.concat(a,b)
a b c
0 1 2.0 NaN
1 2 3.0 NaN
2 3 4.0 NaN
0 11 NaN 22.0
1 22 NaN 33.0
2 33 NaN 44.0
和mrege不同的是cancat是真正的"连接‘’,它把a,b两个表完全拼接在一起,默认拼接形式是并集,我们可以通过修改参数来修改拼接模式,以及拼接方向,也可以重述索引。
pd.concat([a,b],axis=1)
a b a c
0 1 2 11 22
1 2 3 22 33
2 3 4 33 44
pd.concat([a,b],join='inner')
a
0 1
1 2
2 3
0 11
1 22
2 33
d=pd.concat([a,b])
d.index=list(range(0,6))
d
a b c
0 1 2.0 NaN
1 2 3.0 NaN
2 3 4.0 NaN
3 11 NaN 22.0
4 22 NaN 33.0
5 33 NaN 44.0
赋值
通过赋值语句可以使得单列数据的拼接。
e=pd.Series(list('abc'))
a['c']=e
a b c
0 1 2 a
1 2 3 b
2 3 4 c
e=pd.DataFrame(list('abc'))
a['c']=e
a b c
0 1 2 a
1 2 3 b
2 3 4 c
DataFrame.join
join只支持横向连接,可以认为是多列赋值,要求join的列表和原列表不能有重名
仍然使用原数据。
a.join(b)
报错,列重叠
a.join(e)
a b c 0
0 1 2 a a
1 2 3 b b
2 3 4 c c