pandas数据读取与清洗视频09-python中的vlookup|pd.merge()
本系列课程适用人群:
- python零基础数据分析的朋友;
- 在校学生;
- 职场中经常要处理各种数据表格,或大量数据(十万级以上)的朋友;
- 喜欢图表可视化的朋友;
系列视频目前可在B站观看,会定期更新,欢迎大家吐槽!
本节概要:pd.merge()
视频地址:pd.merge()方法
本节代码:
# 导入工具包,pandas、numpy是数据分析中最常用的两个包
import pandas as pd
import numpy as np
# =============================================================================
# pandas.merge()方法,类似于excel中vlookup函数
# =============================================================================
# spyder查看merge的帮助文件
help(pd.merge) # merge后面不写()
'''
merge(left, # 左表, dataframe格式
right, # 右表, dataframe格式
how: str = 'inner', # 字符串,合并方式 left right outer inner
on=None, # 合并的关键字,如果左右两个表关键字名称相同,则用on,不同再设置left_on 和right_on
left_on=None, # 左边表的关键字
right_on=None, # 右边表的关键字
left_index: bool = False, # 左边表是否按索引作为关键字,和left_on 二选一
right_index: bool = False, # 右边表是否按索引作为关键字,和right_on 二选一
sort: bool = False, # 按合并的关键字排序
suffixes=('_x', '_y'), # 当有相同列名区分
copy: bool = True, # 不常用
indicator: bool = False, # 不常用,当设置how方式为outer时,可区分数据是在左边的表,还是右边表,还是都存在,不常用
validate=None) # 不常用
'''
# =============================================================================
# 创建2个dataframe
# =============================================================================
data1 = pd.DataFrame({'姓名': ['A', 'B', 'C', 'D'],
'学校':['一中','一中','一中','一中'],
'英语': [50,60,45,987],
'历史': [64,39,56,88]})
data2 = pd.DataFrame({'姓名': ['B', 'C', 'D', 'E','F','G','H'],
'学校':['一中','一中','一中','一中','一中','一中','一中'],
'数学': np.random.randint(10,30,7),
'政治': np.random.randint(10,30,7),
'备注':['','','','','','','']})
# =============================================================================
# 数据合并
# =============================================================================
# 将右边表同学的成绩匹配到左边的表,单个关键字
resut1 = pd.merge(data1, # 左边的表
data2, # 右边的表
on='姓名', # 按哪些关键子进行合并 ,如果是多个则写成列表格式 比如['',''],因为关键字在左右两个表中都为‘姓名’,所以此处用on
how='left') # 合并方式,多数情况用left
# 将右边表同学的成绩匹配到左边的表,多个关键字
resut2 = pd.merge(data1, # 左边的表
data2, # 右边的表
on=['姓名','学校'],
how='left') # 合并方式
# 合并后列太多,不想显示太多列信息
resut3 = pd.merge(data1, # 左边的表
data2[['姓名','数学','政治']], # 右边的表
on='姓名',
how='left') # 合并方式
# 将右边表同学的成绩匹配到左边的表,单个关键字,如果右边的表数据有重复的,会导致左边的表数据增加。可先去重
resut4 = pd.merge(data1, # 左边的表
#data2,
data2.drop_duplicates(subset='姓名'), # 右边的表
on='姓名',
how='left') # 合并方式