本系列课程适用人群:

  1. python零基础数据分析的朋友;
  2. 在校学生;
  3. 职场中经常要处理各种数据表格,或大量数据(十万级以上)的朋友;
  4. 喜欢图表可视化的朋友;

系列视频目前可在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')  # 合并方式