外链论坛

 找回密码
 立即注册
搜索
查看: 52|回复: 0

2020年入门数据分析选取Python还是SQL?七个常用操作对比!

[复制链接]

2926

主题

148

回帖

9911万

积分

论坛元老

Rank: 8Rank: 8

积分
99119434
发表于 2024-8-4 15:05:54 | 显示全部楼层 |阅读模式

作者:刘早起

源自:早起Python

SQL和Python几乎是当前数据分析师必要认识的两门语言,它们在处理数据时有什么区别?本文将分别用MySQL和pandas来展示七个在数据分析中常用的操作,期盼能够帮忙把握其中一种语言的读者快速认识另一种办法

在阅读本文前,你能够拜访下方网站下载本文运用的示例数据,并导入MySQL与pandas中,一边敲代码一边阅读!

https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/io/data/csv/tips.csv

1、选取

在SQL中,咱们能够运用SELECT语句从表选取数据,结果被存储在一个结果表中,语法如下:

SELECT

 column_name,column_name

FROM

 table_name;

倘若不想表示所有的记录能够运用TOP或LIMIT来限制行数。因此呢选取tips表中的部分列能够运用下面的语句

SELECT total_bill, tip, smoker, timeFROM

 tips

LIMIT 5

;

而在pandas中,咱们能够经过将列名列表传递给DataFrame来完成列选取在SQL中,进行选取同期能够进行计算,例如添加一列

SELECT *, tip/total_bill as

 tip_rate

FROM

 tips

LIMIT 5

;

在pandas中运用DataFrame.assign()一样能够完成这个操作

2、查询

要求查询

在SQL中,WHERE子句用于提取哪些满足指定要求的记录,语法如下

SELECT

 column_name,column_name

FROM

 table_name

WHERE column_name operator value

;

例如查询示例数据中time = dinner的记录

SELECT

 *

FROM

 tips

WHERE time = DinnerLIMIT 5

;

而在pandas中,根据要求进行查询能够有多种形式,例如能够将含有True/False的Series对象传递给DataFrame,并返回所有带有True的行

要求查询

在SQL中,进行多要求查询能够运用AND/OR来完成

SELECT

 *

FROM

 tips

WHERE time = Dinner AND tip > 5.00

;

在pandas中有类似的操作

查询空值

在pandas检测空值是运用notna()和isna()办法完成的。

frame[frame[col1

].notna()]

在SQL中能够运用IS NULL和IS NOT NULL完成

SELECT

 *

FROM

 frame

WHERE col2 IS NULL

;

SELECT

 *

FROM

 frame

WHERE col1 IS NOT NULL;

3、更新

在SQL中运用UPDATE

UPDATE

 tips

SET tip = tip*2WHERE tip < 2

;

而在pandas中则有多种办法例如运用loc函数

tips.loc[tips[tip] < 2tip] *= 2

4、删除

在SQL中运用DELETE

DELETE FROM

 tips

WHERE tip > 9

;

在pandas中,咱们选取保存的行,而不是删除它们

tips = tips.loc[tips[tip] <= 9]

5、分组

在pandas中,运用groupby()办法实现分组。groupby()一般指的是一个过程,在该过程中,咱们期盼将数据集分为几组,应用某些功能(一般是聚合),而后将各组组合在一块

平常的SQL操作是获取全部数据集中每一个组中的记录数。例如,经过对性别进行分组查找

SELECT sex, count

(*)

FROM

 tips

GROUP BY

 sex;

在pandas中的等价操做为重视,在上面代码中,咱们运用size()而不是count() 这是由于count()将函数应用于每一列,并返回每一列中非空记录的数量!

6、连接

在pandas能够运用join()或merge()进行连接,每种办法都有参数,可让指定要执行的联接类型(LEFT,RIGHT,INNER,FULL)或要联接的列。

此刻咱们重新创建两组示例数据,分别用代码来演示区别的连接

df1 = pd.DataFrame({key: [ABCD

],

   ....:                     value: np.random.randn(4

)})

   ....: 

df2 = pd.DataFrame({key: [BD,DE

],

   ....:                     value: np.random.randn(4

)})

内连接

内联接运用比较运算符按照每一个表共有的列的值匹配两个表中的行,在SQL中实现内连接运用INNER JOIN

SELECT

 *

FROM

 df1

INNER JOIN

 df2

  ON

 df1.key = df2.key;

在pandas中能够运用merge()merge()供给有些参数,能够将一个DataFrame的列与另一个DataFrame的索引连接在一块

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-10-18 21:20 , Processed in 0.073770 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.