当前位置: 首页 > 后端技术 > Python

小白学Python数据分析(五):Pandas(四)基本操作(一)查看数据

时间:2023-03-26 01:55:10 Python

在家为国做贡献太无聊了,不如跟我学点Python人生苦短,我用Python上一篇传送门:小白学Python数据分析(一):数据分析基础知识小白学Python数据分析(二):Pandas(一)概述小白学Python数据分析(三):Pandas(二)数据结构系列小白学Python数据分析(四):Pandas(3)数据结构DataFrame简介最近这个系列有一段时间没有更新了,就不找原因了。总结就一个点,偷懒!懒得学了!我就是这样一个能发现错误并承认错误的人。不过从这篇文章开始,我又恢复更新了,手动滑稽:)接下来小编会分享一些Pandas的基本操作,可能有点枯燥,不过还是希望有兴趣的同学可以根据到代码。闲话不多说,言归正传。查看数据在前两篇文章中,我们介绍了Pandas的两种数据结构。本文将主要介绍一些与DataFrame相关的搜索操作。毕竟DataFrame是类似于表格的二维数据结构。我们通常会更多地使用DataFrame。首先第一部分是导入Pandas和NumPy,并生成一个DataFrame,这里小编简单的使用随机数的形式来生成,代码如下:importnumpyasnpiimportpandasaspddates=pd.date_range('20200101',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df)到这里我们终于把生成的DataFrame打印出来了,theresultisasfollows:ABCD2020-01-010.177499-0.0256930.182894-1.1235772020-01-021.0675801.592576-0.010205-0.3493422020-01-031.1412181.0323331.3644770.8516302020-01-040.920260-0.2432470.196369-0.8356552020-01-05-0.729184-0.2357061.144007-1.0486192020-01-06-0.480888-0.995325-0.2837260.428644我们上面的准备工作已经完成,一个随机生成的DataFrame就构建完成了。接下来,让我们看一些简单的值操作。首先,第一个是从head中获取值。这里使用的方法是head()。比如现在我们要取出上面df中第一行的数据,那么我们可以这样写:#查看头部数据print(df.head(1))的结果如下:ABCD2020-01-010.177499-0.0256930.182894-1.123577既然有头部的数字,那么必然有尾部的数字。这个方法就是tail(),用法同上。这里我们从尾部取出两行数据,如下:#查看尾部数据print(df.tail(2))结果如下:ABCD2020-01-05-0.729184-0.2357061.144007-1.0486192020-01-06-0.480888-0.995325-0.2837260.428644对比看前面的df,可以看出电脑顺利完成了我们的目标。接下来,我们得到这个df的索引。这里可以使用的方法是index,如下:#获取索引print(df.index)结果如下:DatetimeIndex(['2020-01-01','2020-01-02','2020-01-03','2020-01-04','2020-01-05','2020-01-06'],dtype='datetime64[ns]',freq='D')如果你能得到索引,您将能够获取所有列名。你可能已经猜到这个方法了。它是列。没有什么问题。Pandas的命名还是很友好的。直接是英文翻译。不规则的代码往往会引起别人的误解,所以我建议大家尽量命名规范一些:#获取列名print(df.columns)结果如下:Index(['A','B','C','D'],dtype='object')这里Pandas也为我们提供了一个非常NB的方法,就是可以直接快速的查看数据的统计汇总。这个方法就是describe()。Thismethodallowsustosimplyknowsomethingwedonot清楚内容的DataFrame里面具体内容,如下:#查看数据的统计摘要print(df.describe())结果如下:ABCDcount6.0000006.0000006.0000006.000000mean0.3494140.1874900.432303-0.346153std0.8186470.9483830.6636040.821275min-0.729184-0.995325-0.283726-1.12357725%-0.316291-0.2413620.038070-0.99537850%0.548879-0.1307000.189632-0.59249875%1.0307500.7678260.9070980.234148max1.1412181.5925761.3644770.851630这里的数据统计的还是比较全面的,包括数据量,均值,方差,最大值,最小值等等。这里小编邪念,如果你中考的时候有这个东西,就不需要了再用手在草稿纸上一张一张做着重复的体力劳动。Pandas还为我们提供了一个神奇的功能,“转置数据”,就是交换行和列。例子如下:#Transposedataprint(df.T)结果如下:2020-01-012020-01-022020-01-032020-01-042020-01-052020-01-06A0.1774991.0675801.1412180.920260-0.729184-0.480888B-0.0256931.5925761.032333-0.243247-0.235706-0.995325C0.182894-0.0102051.3644770.1963691.144007-0.283726D-1.123577-0.3493420.851630-0.835655-1.0486190.428644Isitamazing,butIthinkitisof没有实际用途。在实际应用场景中,我们经常会遇到排序的需求。Pandas为我们提供了两种方法,sort_index()和sort_values()。为了演示方便,小编在这里重构了一个无序的DataFrame,如下:df1=pd.DataFrame({'b':[1,2,3,2],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3])print(df1)结果如下:bac2141023313283212从索引和列名可以看出df1的顺序是乱序的。接下来,我们开始对这个df1进行排序。首先,我们使用sort_values()。sort_values()目的:可以根据列数据或行数据进行排序。注意:by参数必须指定,即必须指定哪些行或列;它不能根据索引和列排序(由sort_index()执行)语法:DataFrame.sort_values(by,axis=0,ascending=True,inplace=False,kind='quicksort',na_position='last')axis:{0or'index',1or'columns'},默认0,默认按列排序,即垂直排序;如果为1,则为水平排序。通过:str或str列表;如果轴=0,则通过=“列名”;如果axis=1,那么by="rowname"。ascending:Boolean,True表示升序,如果by=['列名1','列名2'],那么这个参数可以是[True,False],即第一个字段是升序的,第二个是降序。inplace:布尔值,是否用排序后的数据框替换已有的数据框。kind:排序方式,{'quicksort','mergesort','heapsort'},默认'quicksort'。似乎不用太在意。na_position:{'first','last'},默认'last',默认缺失值排在最后。b列升序排序:#b列升序排序print(df1.sort_values(by='b'))结果如下:bac2141023332121328第一个按b列降序排序,然后按a列升序排序:#先按b列降序排序,再按a列升序排序print(df1.sort_values(by=['b','a'],axis=0,ascending=[False,True]))结果如下:bac1328321202332141按第3行升序排列,必须指定axis=1:#排列第3行升序,必须指定axis=1print(df1.sort_values(by=3,axis=1))结果如下:abc2411032312383122Sortin第3行升序,第0行降序:#按第3行升序,第0行降序排列print(df1.sort_values(by=[3,0],axis=1,ascending=[True,False]))结果如下:acb2411033212833122sort_index()目的:默认按照行标签对所有行进行排序,或者根据列标签对所有列进行排序,或者通过指定一个或多个列对行进行排序。注意:df.sort_index()可以完成与df.sort_values()完全相同的功能,但是python建议只使用df.sort_index()对索引和列进行排序,其他排序方法使用df.sort_values()。语法:DataFrame.sort_index(axis=0,level=None,ascending=True,inplace=False,kind='quicksort',na_position='last',sort_remaining=True,by=None)axis:0按行名排序;1按列名排序。级别:默认None,否则根据给定的级别顺序排序。升序:默认真升序;错误的降序。inplace:默认为False,否则排序后的数据会直接替换原来的数据框。kind:排序方式,{'quicksort','mergesort','heapsort'},默认'quicksort'。似乎不用太在意。na_position:缺失值默认排在末尾{"first","last"}。by:按照某一列或几列数据进行排序,但是by参数好像不太推荐。默认按“行标签”升序排列:#默认按“行标签”升序排列:#按“列标签”升序排列print(df1.sort_index(axis=1))结果如下如下:abc2411032312383122还有两个按列排序的例子:#先按b列“降序”排列,因为b列有相同的值,相同的值按a列“升序”排列print(df1.sort_index(by=['b','a'],ascending=[False,True]))#先按“降序”排列a列的“顺序”,但是a列没有相同的值,所以这里按b列的“升序”排序是行不通的。print(df1.sort_index(by=['a','b'],ascending=[False,True]))结果如下:bac2141321202331328bac2141023313283212虽然排序正常,但是程序运行后出现警告,如下:FutureWarning:byargumenttosort_indexisdeprecated,pleaseuse.sort_values(by=...)这个warning表示不建议我们使用sort_index()来使用by参数,建议我们使用sort_values()方法。示例代码是老规矩,所有示例代码都会上传到代码管理仓库Github和Gitee,方便大家使用。示例代码-Github示例代码-Gitee参考https://www.pypandas.cn/docs/...https://www.jianshu.com/p/f0e...如果我的文章对您有帮助,请扫一扫代码跟随作者的公众号:获取最新干货推送:)