文章目录

  • Merge语法
  • 数据集介绍
  • merge实现
  • 理解merge时数量的对齐关系
  • one-to-one 一对一关系的merge
  • one-to-many 一对多关系的merge
  • many-to-many 多对多关系的merge
  • 理解left join、right join、inner join、outer join的区别
  • 如果出现非Key的字段重名怎么办


  如何把不同的DataFrame数据Merge成一个大表?Pandas的Merge,相当于Sql的Join,将不同的表按key关联到一个表。

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, validate=None)
  • left,right:要merge的dataframe或者有name的Series。
  • how:join类型,‘left’, ‘right’, ‘outer’, ‘inner’。
  • on:join的key,left和right都需要有这个key。
  • left_on:left的df或者series的key。
  • right_on:right的df或者seires的key。
  • left_index,right_index:使用index而不是普通的column做join。
  • suffixes:两个元素的后缀,如果列有重名,自动添加后缀,默认是(‘_x’, ‘_y’)。
  • 文档地址:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

数据集介绍

  包含三个文件:

  1. 用户对电影的评分数据 ratings.dat
  2. 用户本身的信息数据 users.dat
  3. 电影本身的数据 movies.dat

  由于这三个数据集是有关系的,因此可以关联三个表,得到一个完整的大表。

  • 数据集官方地址:https://grouplens.org/datasets/movielens/
  • 读取用户对电影的评分数据 ratings.dat
  • Python merge多条件关联_一对一

  数据中的UserIDMovieID可以实现关联。这里设置engine='python'是为了不让编译器认为"::"是正则表达式。

  • 读取用户本身的信息数据 users.dat

Python merge多条件关联_一对一_02

  • 读取电影本身的数据 movies.dat

Python merge多条件关联_pandas_03

merge实现

  对df_ratingsdf_users进行mergemerge的依据就是左边left_on="UserID",右边right_on="UserID"how="inner"表示两边都有的数据才会被merge

Python merge多条件关联_Python merge多条件关联_04

  对df_ratings_usersdf_moviesmerge也是类似:

Python merge多条件关联_数据集_05

理解merge时数量的对齐关系

  以下关系要正确理解:

  • one-to-one:一对一关系,关联的key都是唯一的
  1. 比如(学号,姓名) merge (学号,年龄)
  2. 结果条数为:1*1
  • one-to-many:一对多关系,左边唯一key,右边不唯一key
  1. 比如(学号,姓名) merge (学号,[语文成绩、数学成绩、英语成绩])
  2. 结果条数为:1*N
  • many-to-many:多对多关系,左边右边都不是唯一的
  1. 比如(学号,[语文成绩、数学成绩、英语成绩]) merge (学号,[篮球、足球、乒乓球])
  2. 结果条数为:M*N
one-to-one 一对一关系的merge

Python merge多条件关联_数据集_06

  代码实现:

Python merge多条件关联_一对一_07

one-to-many 一对多关系的merge

  从这里开始就要注意数据会被复制:

Python merge多条件关联_数据集_08

  代码实现:

Python merge多条件关联_Python merge多条件关联_09

many-to-many 多对多关系的merge

Python merge多条件关联_pandas_10

  代码实现:

Python merge多条件关联_一对一_11

理解left join、right join、inner join、outer join的区别

  mergehow的选择方式有以下几种:

Python merge多条件关联_一对一_12

  • 创建两个dataframe

Python merge多条件关联_Python merge多条件关联_13

  可以看到K0K1是都有的,其余两个是各自的,由此可以有四种方式merge

  • inner join,默认

Python merge多条件关联_Python merge多条件关联_14

  • left join

Python merge多条件关联_数据_15

  • right join

Python merge多条件关联_pandas_16

  • outer join

Python merge多条件关联_Python merge多条件关联_17

如果出现非Key的字段重名怎么办

Python merge多条件关联_一对一_18