【Pandas学习笔记Task06】:连接

import numpy as np
import pandas as  pd

一、关系型连接

把两个表根据某一个键或者某一组键连接起来,就属于连接。(这里可以与数据库相联系,其实从理论上讲都是相同的操作。)连接的类型包括左连接、右连接和内外连接。外连接又叫全连接。

1.值连接

可以通过几列值的组合进行连接,这种基于值的连接可以由 merge 函数实现

df1 = pd.DataFrame({'Name':['San Zhang','Si Li'],
                        'Age':[20,30]})
df2 = pd.DataFrame({'Name':['Si Li','Wu Wang'],
                        'Gender':['F','M']})
    
df1.merge(df2, on='Name', how='left')
NameAgeGender
0San Zhang20NaN
1Si Li30F
# 上面的是有共同的列,如果没有共同的列,可以通过指定左连接还是右连接(这不就是数据库嘛)
df1 = pd.DataFrame({'df1_name':['San Zhang','Si Li'],
                        'Age':[20,30]})
df2 = pd.DataFrame({'df2_name':['Si Li','Wu Wang'],
                        'Gender':['F','M']})
df1.merge(df2, left_on='df1_name', right_on='df2_name', how='left')
df1_nameAgedf2_nameGender
0San Zhang20NaNNaN
1Si Li30Si LiF

如果两个表中的列出现了重复的列名,那么可以通过 suffixes 参数指定

df1 = pd.DataFrame({'Name':['San Zhang'],'Grade':[70]})
df2 = pd.DataFrame({'Name':['San Zhang'],'Grade':[80]})
df1.merge(df2, on='Name', how='left', suffixes=['_Chinese','_Math']) # suffixes参数可以在同列后根据位置加后缀
NameGrade_ChineseGrade_Math
0San Zhang7080

2.索引连接

索引连接,就是把索引当作键。与上面的那个值连接相似。

df1 = pd.DataFrame({'Age':[20,30]},
                       index=pd.Series(
                       ['San Zhang','Si Li'],name='Name'))
df2 = pd.DataFrame({'Gender':['F','M']},
                        index=pd.Series(
                       ['Si Li','Wu Wang'],name='Name'))
df1.join(df2, how='left')
AgeGender
Name
San Zhang20NaN
Si Li30F
# df1 = pd.DataFrame({'Name':['San Zhang'],'Grade':[70]})
# df2 = pd.DataFrame({'Name':['San Zhang'],'Grade':[80]})
df1 = pd.DataFrame({'Grade':[70]},
                       index=pd.Series(['San Zhang'],
                       name='Name'))
df2 = pd.DataFrame({'Grade':[80]},
                      index=pd.Series(['San Zhang'],
                       name='Name'))
df1.join(df2, how='left', lsuffix='_Chinese', rsuffix='_Math') # 这里用join,与merge的区别是后面的后缀。这个是单独传俩,merge是以列表形式给出
Grade_ChineseGrade_Math
Name
San Zhang7080
# 以多列为键的操作的时候, join 需要使用多级索引
# 这里感觉用join的多级索引比较麻烦(主要是提到多级索引就头疼,还能搞明白吧)
df1 = pd.DataFrame({'Age':[20,21]},
                        index=pd.MultiIndex.from_arrays(
                        [['San Zhang', 'San Zhang'],['one', 'two']],
                        names=('Name','Class')))
df2 = pd.DataFrame({'Gender':['F', 'M']},
                        index=pd.MultiIndex.from_arrays(
                        [['San Zhang', 'San Zhang'],['two', 'one']],
                        names=('Name','Class')))
df1
Age
NameClass
San Zhangone20
two21
df2
Gender
NameClass
San ZhangtwoF
oneM
df1.join(df2)
AgeGender
NameClass
San Zhangone20M
two21F

二、方向连接

1.concat

这个与关系连接的区别在于这个不需要指定相同的列,就是将俩表连接起来。指定是行还是列(axis=0 or 1)

df1 = pd.DataFrame({'Name':['San Zhang','Si Li'],
                      'Age':[20,30]})
df2 = pd.DataFrame({'Name':['Wu Wang'], 'Gender':['M']})
pd.concat([df1, df2],axis=1) # 默认axis=0,纵向,这里横向来看会将列索引延续下去,纵向连接会对其索引
NameAgeNameGender
0San Zhang20Wu WangM
1Si Li30NaNNaN
pd.concat([df1, df2],axis=0,join='inner') # 这里join默认保留所有,设置为inner时看axis=0 or 1,1就是去掉某些值不存在的行,只保留都非空的行。0就是看列
Name
0San Zhang
1Si Li
0Wu Wang

keys可以产生多级索引,对原来合并前的表进行一个标识

df1 = pd.DataFrame({'Name':['San Zhang','Si Li'],
                      'Age':[20,21]})
df2 = pd.DataFrame({'Name':['Wu Wang'],'Age':[21]})
pd.concat([df1, df2], keys=['one', 'two'])
NameAge
one0San Zhang20
1Si Li21
two0Wu Wang21

总结

就到这里了。本次学习时间分配的不是很合理。导致学习起来也不在状态,就不自欺欺人了,再往下学也没有收获那就到这里吧,等再学到连接这里补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值