赞
踩
如何把不同的DataFrame
数据Merge
成一个大表?Pandas的Merge,相当于Sql的Join,将不同的表按key关联到一个表。
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
包含三个文件:
ratings.dat
users.dat
movies.dat
由于这三个数据集是有关系的,因此可以关联三个表,得到一个完整的大表。
数据集官方地址:https://grouplens.org/datasets/movielens/
读取用户对电影的评分数据 ratings.dat:
数据中的UserID
和MovieID
可以实现关联。这里设置engine='python'
是为了不让编译器认为"::"
是正则表达式。
对df_ratings
和df_users
进行merge
,merge
的依据就是左边left_on="UserID"
,右边right_on="UserID"
, how="inner"
表示两边都有的数据才会被merge
:
对df_ratings_users
和df_movies
的merge
也是类似:
以下关系要正确理解:
key
都是唯一的
merge
(学号,年龄)key
,右边不唯一key
。
merge
(学号,[语文成绩、数学成绩、英语成绩])merge
(学号,[篮球、足球、乒乓球])代码实现:
从这里开始就要注意数据会被复制:
代码实现:
代码实现:
merge
时how
的选择方式有以下几种:
dataframe
: 可以看到K0
和K1
是都有的,其余两个是各自的,由此可以有四种方式merge
:
我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。