作者:刘早起
源自:早起Python
SQL和Python几乎是当前数据分析师必要要认识的两门语言,它们在处理数据时有什么区别?本文将分别用MySQL和pandas来展示七个在数据分析中常用的操作,期盼能够帮忙把握其中一种语言的读者快速认识另一种办法!
在阅读本文前,你能够拜访下方网站下载本文运用的示例数据,并导入MySQL与pandas中,一边敲代码一边阅读! https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/io/data/csv/tips.csv1、选取
在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] < 2, tip] *= 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: [A, B, C, D
], ....: value: np.random.randn(4
)})
....: df2 = pd.DataFrame({key: [B, D,D, E
], ....: value: np.random.randn(4
)})
内连接
内联接运用比较运算符按照每一个表共有的列的值匹配两个表中的行,在SQL中实现内连接运用INNER JOIN SELECT
* FROM
df1 INNER JOIN
df2 ON
df1.key = df2.key;
在pandas中能够运用merge()merge()供给了有些参数,能够将一个DataFrame的列与另一个DataFrame的索引连接在一块 |