前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas实现类SQL连接操作

pandas实现类SQL连接操作

作者头像
陆勤_数据人网
发布2019-05-31 11:16:22
1.3K0
发布2019-05-31 11:16:22
举报

请思考:

1 SQL的表连接有哪些方式?如何使用?

2 pandas的merge()函数如何实现左连接(left_join)?

我创建了Python语言微信群,定位:Python语言学习和实践。想要入群的伙伴,请加我的个人微信:luqin360,备注:Python入群。

一 SQL的表连接方式

一图胜千字,SQL表连接方式,如下图总结:

我在实际工作中,常用的连接方式:内连接(inner_join),左连接(left_join)和A-B连接

请您花30秒时间,给自己复述下上图的7种连接的处理逻辑?

二 pandas的merge()函数实现类SQL的连接

pandas提供merge()函数可以便捷地实现类似SQL的各种连接操作。

>merge函数说明文档

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

重要参数:

  • right:指定需要连接的数据框或者序列
  • how:指定需要连接的方式,可选项{‘left’, 'right', 'outer', 'inner'},默认是'inner',即内连接。
  • on:指定要连接的列或者索引,默认是两者公共的列。
  • left_on:指定要连接左侧数据框的列或者索引
  • right_on:指定要连接右侧数据框的列或者索引
  • left_index:使用左侧数据框的索引作为连接的key
  • right_index:使用右侧数据框的索引作为连接的key

三 实践操练

1 导入所需库和数据集

代码

代码语言:javascript
复制
# 导入所需库
import pandas as pd
# 导入数据集
user_usage = pd.read_csv('./data/user_usage.csv')
user_device = pd.read_csv('./data/user_device.csv')
devices = pd.read_csv('./data/android_devices.csv')
# 对devices的列名重命名
devices.rename(columns={"Retail Branding": "manufacturer"}, inplace=True)
# 数据检视
print(user_usage.head())
print(user_device.head())
print(devices.head())

2 内连接(默认的连接方式)

代码

代码语言:javascript
复制
result = pd.merge(user_usage, user_device[['use_id', 'platform', 'device']], on='use_id')
result.head()

3 左连接(how='left')

代码

代码语言:javascript
复制
result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 how = 'left',
                 on = 'use_id')
print('user_usage 维度:{}'.format(user_usage.shape))
print('result 维度:{}'.format(result.shape))
print('result 的缺失值个数:{}'.format(result['device'].isnull().sum()))
print(result.head())

4 右连接(how='right')

代码

代码语言:javascript
复制
result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 on = 'use_id',
                 how = 'right')
print('user_device 维度:{}'.format(user_device.shape))
print('result 维度:{}'.format(result.shape))
print('result中列名monthly_mb的缺失值个数:{}'.format(result['monthly_mb'].isnull().sum()))
print(result.tail())

5 差连接

代码

代码语言:javascript
复制
result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 how = 'left',
                 on = 'use_id')
result1 = result[result['device'].isnull()]
print('result 维度:{}'.format(result.shape))
print('result1 维度:{}'.format(result1.shape))
print(result1.head())

6 全连接(how='outer')

代码

代码语言:javascript
复制
print('两个数据框全连接后use_id的唯一值个数:{}'.format(pd.concat([user_usage['use_id'], user_device['use_id']]).unique().shape[0]))
result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 how = 'outer',
                 on = 'use_id',
                 indicator = True)
print('全连接结果所具有的函数:{}'.format(result.shape[0]))
print('全连接结果没有缺失值的行数:{}'.format((result.apply(lambda x: x.isnull().sum(), axis=1) == 0).sum()))
print(result.iloc[[0, 1, 200,201, 350,351]])
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档