Pandas 表连接(concat,merge,append)
## 1.pd.concat([left,right],axis=1)
## 2.pd.merge(left,right,how='inner')
## 3.pad.append( line, ignore_index=True)
1. pd.concat()
将数据根据不同的轴作简单的融合
pd.concat(objs, axis=0, join='outer',
join_axes=None,
ignore_index=False,
keys=None, levels=None,
names=None, verify_integrity=False,
copy=True)
参数说明:
objs: series,dataframe 或者是panel构成的序列list
axis: 需要合并链接的轴,0是行,1是列
join: 连接的方式 inner,或者outer
其他一些参数不常用,用的时候再补上说明。
步骤:
- 将表构成 list,然后作为concat输入
- 为了 区分表,可以增加关键词
frames = [df1, df2, df3]
result = pd.concat(frames)
result = pd.concat(frames, keys=['x', 'y', 'z'])
输出结果如下图:
横向连接(axis=1)
当axis = 1的时候,concat就是行对齐,然后将不同列名称的两张表合并
举例子
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': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index = [2, 3, 6, 7])
result = pd.concat([df1,df2], axis = 1)
数据库形式的连接(join)
join参数的属性:
如果为 inner 得到的是两表的交集;
如果是outer,得到的是两表的并集。
result = pd.concat([df1, df2], axis=1, join= 'inner')
result = pd.concat([df1, df2], axis=1, join= 'outer')
纵向连接(axis=1)
result = pd.concat([df1,df2], axis = 0)
增加区分表的来源(key)
result = pd.concat([df1,df2],axis=1, key = ('a','b'))
指定对其列(join_axes)
result = pd.concat([df1,df2], axis=1, join_axis = [df1.index])
注意:改命令已经在pandas1.0版本以上取消了,只适用于1.0版本以下
2. pd.merge()
pd.merge(left, right, how='inner',
on=None, left_on=None, right_on=None,
left_index=False, right_index=False,
sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
参数含义:
left:左数据表
right:右数据表
on:以哪一列为标准做联表,如果没有输入参数,则会以共有的索引作为依据
left_on:以左边的数据框作为join key
right_on:以右边的数据框作为join key
left_index:以左边的索引作为join key
right_index:以右边的索引作为join key
how:left, right, out, inner,默认为inner
sort:通过join key对结果进行排序
例子:
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': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index = [2, 3, 6, 7])
result = pd.merge(df1,df2,how='inner')
result = pd.merge(df1,df2,how='outer')
3. 增加新的行数(pd.append)
s1 = pd.Series(['x0','x1','x2','x3'], index=['A','B','C','D'])
result5 = df1.append(s1,ignore_index=True)
ignore_index=True 表示新增的索引不能重复