当前位置:   article > 正文

Pandas系列(十)Merge语法_pandas merge

pandas merge

  如何把不同的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)
  • 1
  • 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
    数据集读取

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

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

读取数据

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

读取数据

merge实现

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

rating和user的merge

  对df_ratings_usersdf_moviesmerge也是类似:

df_ratings_users和df_movies的merge

理解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

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

  代码实现:

代码实现

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

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

一对多关系的merge

  代码实现:

代码实现

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

多对多的merge

  代码实现:

代码实现

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

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

选择方式

  • 创建两个dataframe

原始数据

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

  • inner join,默认

inner join

  • left join

left join

  • right join

right join

  • outer join

outer join

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

非Key的字段重名

我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/697181
推荐阅读
相关标签
  

闽ICP备14008679号