第3章 7-8:合并、连接数据集
包含三个函数:
numpy:concatenate 省略,在126页。
pandas:concat/ append(略过) /merge
主要是讲merge函数的参数:pd.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None) pd.merge 官方文档
concat:
如果a,b是两个字段名称相同的dataframe,就像原来的一部、二部各有存放业绩的两个表,在sql中可以用join连接,而pandas中用concat连接(注意有中括号)
pd.concat([yibu,erbu]) #yibu,erbu是两个dataframe
如果两个表的字段名不完全相同,会自动填充没有的字段,如下:
如果只想保留都有的字段,则在参数中指定为inner
如果想保留df5的字段名(即不要df6中的D列,可以在join_axes中设定
pd.concat([df5,df6], join_axes = [df5.columns])
merge:数据合并
分为1对1,1对多,多对多。
(merge没有[ ])
-- 1对1:
pd.merge(df1,df2) #默认合并两个表的所有列,如果df1有a,b列,df2有b,c列,则结果为a,b,c列
-- 多对1:保留多条记录
-- 多对多:会交叉每一条记录
通过参数 on 设定连接方式:
df1: employee, group
df2: employee, hire_data
两个表都有employee两个字段,则通过employee连接两个表。
pd.merge(df1,df2,on = 'employee')
df3: name, salary
df1与 df3没有相同的字段,但是df3中的name和df1中的employee字段内容相同,都是姓名,所有可以通过left_on,right_on设定左右两个表的关联字段,实现连接。
pd.merge(df1,df3, left_on = 'employee', right_on = 'name')
# name和employee的字段内容相同,可删除name保留一列:
pd.merge(df1,df3, left_on = 'employee', right_on = 'name').drop('name',axis =1)
通过索引连接,这部分略讲:
假如df1,df2中的index均为employee列,则连接方法如下:
pd.merge(df1,df2, left_index = True, right_index=True)
# 也可以用join连接
df1.join(df2)
如果df1的empolyee为索引,df2没有设置索引,则连接的代码为: 134页
pd.merge(df1, df2, left_index =True, right_on='name')
merge:数据连接
-- 参数 how:连接方式
这里主要是用merge里面的参数how,how参数有4种方式:
inner:内连接,保留两个表相同的行
outer:外连接,保留两个表所有的行
left:左连接,以左表为准,保留左表所有的行,右表匹配左表的结果
right:右连接,以右表为准,*
pd.merge(df6,df7, how = 'inner')
-- 参数 suffixes:自定义后缀名
如果两个表的字段名相同,但对于的值不同,想保留两个表不同的值,可以设定参数suffixes
pd.merge(df8,df9, on = 'name', suffixes = ["_L","_R"])
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。