SQL和Python几乎是现在数据分析师必须要懂的两种语言。它们在处理数据时有什么区别?本文将使用MySQL和pandas来展示数据分析中常用的七种操作,希望能够帮助掌握其中一种语言的读者快速了解另一种方法!在阅读本文之前,您可以访问以下网站下载本文使用的示例数据,并将其导入MySQL和pandas,边敲代码边阅读!https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/io/data/csv/tips.csv1.选择在SQL中,我们可以使用SELECT语句从表中选择数据,并将结果存储在结果表中,语法如下:SELECTcolumn_name,column_nameFROMtable_name;如果不想显示所有记录,可以使用TOP或LIMIT来限制行数。因此,要选择tips表中的一些列,可以使用如下语句SELECTtotal_bill,tip,smoker,timeFROMtipsLIMIT5;而在pandas中,我们可以通过将列名列表传递给DataFrame来完成列选择。在SQL中也可以选择Performcalculations,比如增加一列SELECT*,tip/total_billastip_rateFROMtipsLIMIT5;在pandas中使用DataFrame.assign()也可以完成这个操作二、搜索1、单条件搜索在SQL中,WHERE子句用于提取那些满足指定条件的记录,语法如下:SELECTcolumn_name,column_nameFROMtable_nameWHEREcolumn_nameoperatorvalue;例如,要在示例数据中搜索time=dinner的记录SELECT*FROMtipsWHEREtime='Dinner'LIMIT5;在pandas中,有多种形式的按条件查找,如True/False将Series对象传递给DataFrame,返回所有带True的行2.多条件查找在SQL中,多条件查找可以使用AND/或者。pandas中也有类似的操作3.pandas中查找空值检查空值是使用notna()和isna()方法完成的。frame[frame['col1'].notna()]可以在SQL中使用ISNULL和ISNOTNULL来完成SELECT*FROMframeWHEREcol2ISNULL;SELECT*FROMframeWHEREcol1ISNOTNULL;3.更新UPDATEUPDATEtipsSETtiptip=tip*2WHEREtip<2;在SQL中pandas有很多方法,比如使用loc函数tips.loc[tips['tip']<2,'tip']*=2四、删除在SQL中使用DELETEDELETEFROMtipsWHEREtip>9;在pandas中,我们选择shouldKeeptherowsinsteadofdeletingthemtipstips=tips.loc[tips['tip']<=9]5.分组在pandas中,使用groupby()方法实现分组。groupby()一般指的是我们要将数据集分成组,应用一些函数(通常是聚合),然后将这些组组合在一起的过程。一个常见的SQL操作是获取整个数据集中每组的记录数。例如按性别查询SELECTsex,count(*)FROMtipsGROUPBYsex;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)})1.内连接内连接使用比较运算符根据每张表共有的列的值来匹配两张表中的行,在SQL中实现内连接使用INNERJOINSELECT*FROMdf1INNERJOINdf2ONdf1.key=df2.key;在熊猫中,您可以使用merge()merge()提供一些参数将一个DataFrame的列与另一个DataFrame👇2的索引连接起来。Left/RightOuterJoin在SQL中,可以使用LEFTOUTERJOIN和RIGHTOUTERJOINSELECT*FROMdf1LEFTOUTERJOINdf2ONdf1.key=df2.key;SELECT*FROMdf1RIGHTOUTERJOINdf2ONdf1.key=df2.key;也可以用在pandasmerge()中,指定how关键字为left或right3.全连接全连接返回左表和右表的所有行,不管是否匹配,但不是所有数据库都支持,如mysql不支持,在SQL中可以使用FULLOUTERJOINSELECT*FROMdf1FULLOUTERJOINdf2ONdf1.key=df2.key;在pandas中,您还可以使用merge()并将how关键字指定为outer。七。合并SQL中的UNION操作用于合并两个或多个SELECT语句的结果集,UNION类似于UNIONALL,但是UNION会删除重复的行。示例代码如下SELECTcity,rankFROMdf1UNIONALLSELECTcity,rankFROMdf2;/*cityrankChicago1SanFrancisco2NewYorkCity3Chicago1Boston4LosAngeles5*/在pandas中可以使用concat()实现UNIONALL。上面是UNIONALL保留重复值。如果要删除,可以使用drop_duplicates()。以上就是本文的全部内容,大家可以看看不同的语言在不同的场景下有不同的特点,如果想深入了解,可以进一步查阅官方文档,多练习!
