page contents

sql与python有哪些区别联系?入门数据分析主选哪种?程序员必看

以上就是本文的全部内容,可以看到在不同的场景下不同的语言有着不同的特性,如果你想深入学习了解可以进一步查阅官方文档并多加练习!

attachments-2021-03-94m8qJP4606169ce48d7c.png


SQL和Python几乎是当前数据分析师必须要了解的两门语言,它们在处理数据时有什么区别?本文将分别用MySQL和pandas来展示七个在数据分析中常用的操作,希望可以帮助掌握其中一种语言的读者快速了解另一种方法

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

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


  一、选择

在SQL中,我们可以使用SELECT语句从表选择数据,结果被存储在一个结果表中,语法如下:

SELECT column_name,column_name
FROM table_name;

如果不想显示全部的记录,可以使用TOP或LIMIT来限制行数。因此选择tips表中的部分列可以使用下面的语句

SELECT total_bill, tip, smoker, time
FROM tips
LIMIT 5;

attachments-2021-03-Nam8vMyE60616b2759769.jpg

而在pandas中,我们可以通过将列名列表传递给DataFrame来完成列选择

attachments-2021-03-eNKktpJs60616b3155464.png

在SQL中,进行选择的同时还可以进行计算,比如添加一列

SELECT *, tip/total_bill as tip_rate
FROM tips
LIMIT 5;

attachments-2021-03-h7XW7j1F60616b47a0b60.png

在pandas中使用DataFrame.assign()同样可以完成这个操作

attachments-2021-03-UvNUYeCT60616b500930e.png

  二、查找

单条件查找

在SQL中,WHERE子句用于提取那些满足指定条件的记录,语法如下

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

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

SELECT *
FROM tips
WHERE time = 'Dinner'
LIMIT 5;

attachments-2021-03-20VYFjvJ60616b5e8d96f.jpg

而在pandas中,按照条件进行查找则可以有多种形式,比如可以将含有True/False的Series对象传递给DataFrame,并返回所有带有True的行

attachments-2021-03-dL1H2qna60616c732fd54.png

多条件查找

在SQL中,进行多条件查找可以使用AND/OR来完成

SELECT *
FROM tips
WHERE time = 'Dinner' AND tip > 5.00;

attachments-2021-03-258aVZK060616c6054435.png

在pandas中也有类似的操作

attachments-2021-03-EbsknhJW60616c533e926.png

查找空值

在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;


  三、更新

在SQL中使用UPDATE

UPDATE tips
SET tip = tip*2
WHERE tip < 2;

而在pandas中则有多种方法,比如使用loc函数

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


  四、删除

在SQL中使用DELETE

DELETE FROM tips
WHERE tip > 9;

在pandas中,我们选择应保留的行,而不是删除它们

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


  五、分组

在pandas中,使用groupby()方法实现分组。groupby()通常是指一个过程,在该过程中,我们希望将数据集分为几组,应用某些功能(通常是聚合),然后将各组组合在一起。

常见的SQL操作是获取整个数据集中每个组中的记录数。例如,通过对性别进行分组查询

SELECT sex, count(*)
FROM tips
GROUP BY sex;

attachments-2021-03-qgPnRfPi60616c39cd9bd.jpg

在pandas中的等价操作为

attachments-2021-03-4WQyHmop60616c2cc6ea6.jpg

注意,在上面代码中,我们使用size()而不是count() 这是因为count()将函数应用于每一列,并返回每一列中非空记录的数量!

  

六、连接

在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()

attachments-2021-03-4OgCHFT260616c1b11baa.png

merge()提供了一些参数,可以将一个DataFrame的列与另一个DataFrame的索引连接在一起

attachments-2021-03-NyNRAipw60616c941fab8.png

更多技术资讯,请关注六星社区


attachments-2021-03-rULIRsjo60616cca41b5c.jpg

  • 发表于 2021-03-29 13:47
  • 阅读 ( 731 )
  • 分类:数据库

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章