专栏名称: 极客挖掘机
高级软件工程师
目录
相关文章推荐
十点读书会  ·  《哪吒2》登顶全球影史前9!外国人坐不住了: ... ·  11 小时前  
新京报书评周刊  ·  《情绪疲惫的你》:觉察自我是一场精神的归乡 ·  3 天前  
51好读  ›  专栏  ›  极客挖掘机

小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

极客挖掘机  · 掘金  ·  · 2020-02-19 02:36

正文

阅读 46

小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

在家为国家做贡献太无聊,不如跟我一起学点 Python

人生苦短,我用 Python

前文传送门:

小白学 Python 数据分析(1):数据分析基础

小白学 Python 数据分析(2):Pandas (一)概述

小白学 Python 数据分析(3):Pandas (二)数据结构 Series

小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame

引言

最近这个系列有段时间没更新,理由也就不找了,总结就一点,懒!懒得学习!

我就是这么一个能勇于发现并且承认错误的人。

不过从这篇开始,我又恢复更新了,手动滑稽一下:)

接下来小编要分享一些 Pandas 的基础操作,可能会有些无聊,不过还是希望有兴趣的同学能对照着代码自己动手敲一下。

闲话不多聊,下面开始正题。

查看数据

前面的两篇内容中,我们介绍了 Pandas 的两种数据结构,本篇的内容将主要介绍一些有关于 DataFrame 的查找操作,毕竟 DataFrame 是一个二维类似于表一样的数据结构,我们平时会更多的使用 DataFrame 。

首先第一部还是导入 Pandas 与 NumPy ,并且要生成一个 DataFrame ,这里小编就简单的使用随机数的形式进行生成,代码如下:

import numpy as np
import pandas as pd

dates = pd.date_range('20200101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

print(df)复制代码

这里最后我们打印了一下这个生成的 DataFrame ,结果如下:

                   A         B         C         D
2020-01-01  0.177499 -0.025693  0.182894 -1.123577
2020-01-02  1.067580  1.592576 -0.010205 -0.349342
2020-01-03  1.141218  1.032333  1.364477  0.851630
2020-01-04  0.920260 -0.243247  0.196369 -0.835655
2020-01-05 -0.729184 -0.235706  1.144007 -1.048619
2020-01-06 -0.480888 -0.995325 -0.283726  0.428644复制代码

以上我们的准备工作就完成了,已经构建了一个随机产生的 DataFrame ,接下来我们看一些简单的取值操作。

首先第一个是从头部开始取值,这里使用到的方法是 head() ,比如现在需要取出上面这个 df 中第一行的数据,那我们可以这么写:

# 查看头部数据
print(df.head(1))复制代码

结果如下:

                   A         B         C         D
2020-01-01  0.177499 -0.025693  0.182894 -1.123577复制代码

既然有从头部取数那么一定会有从尾部取数,这个方法是 tail() ,用法和上面的一样,这里我们从尾部取出两行的数据,如下:

# 查看尾部数据
print(df.tail(2))复制代码

结果如下:

                   A         B         C         D
2020-01-05 -0.729184 -0.235706  1.144007 -1.048619
2020-01-06 -0.480888 -0.995325 -0.283726  0.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')复制代码

能获取索引那么就一定能获取所有的列名,这个方法大家可能都猜到了,就是 columns ,没毛病, Pandas 的命名还是很友好的,直接就是英文翻译,多的我这里就不吐槽了,命名不规范的代码经常性的会造成他人的误解,所以建议各位尽量命名规范一点:

# 获取列名
print(df.columns)复制代码

结果如下:

Index(['A', 'B', 'C', 'D'], dtype='object')复制代码

这里 Pandas 还为我们提供了一个很 NB 的方法,就是直接快速查看数据的统计摘要,这个方法是 describe() ,这个方法可以让我们简单的知道一个我们不清楚内容的 DataFrame 里面具体内容,如下:

# 查看数据的统计摘要
print(df.describe())复制代码

结果如下:

              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.349414  0.187490  0.432303 -0.346153
std    0.818647  0.948383  0.663604  0.821275
min   -0.729184 -0.995325 -0.283726 -1.123577
25%   -0.316291 -0.241362  0.038070 -0.995378
50%    0.548879 -0.130700  0.189632 -0.592498
75%    1.030750  0.767826  0.907098  0.234148
max    1.141218  1.592576  1.364477  0.851630复制代码

这里的数据统计的挺全乎的,包括了数据量、均值、方差、最大值、最小值等。

小编这里邪恶的想,如果在上中学考试的时候有这玩意,就再也不需要用手在草稿纸上一个一个去做重复的体力劳动了。

Pandas 还为我们提供了一个神奇的功能,「转置数据」,就是把行列互换,示例如下:

# 转置数据
print(df.T)复制代码

结果如下:

   2020-01-01  2020-01-02  2020-01-03  2020-01-04  2020-01-05  2020-01-06
A    0.177499    1.067580    1.141218    0.920260   -0.729184   -0.480888
B   -0.025693    1.592576    1.032333   -0.243247   -0.235706   -0.995325
C    0.182894   -0.010205    1.364477    0.196369    1.144007   -0.283726
D   -1.123577   -0.349342    0.851630   -0.835655   -1.048619    0.428644复制代码

是不是很神奇,不过小编觉得并无什么实际用处。

我们在实际的应用场景中,经常会遇到排序的需求, 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)复制代码

结果如下:

   b  a  c
2  1  4  1
0  2  3  3
1  3  2  8
3  2  1  2复制代码

可以看到,这个 df1 从索引和列名上看顺序都是乱序的,接下来我们开始对这个 df1 进行排序,首先我们先使用 sort_values()

sort_values()

用途:既可以根据列数据,也可根据行数据排序。

注意:必须指定by参数,即必须指定哪几行或哪几列;无法根据 index 和 columns 排序(由 sort_index() 执行)

语法:DataFrame.sort values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na position='last')

  • axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照列排序,即纵向排序;如果为1,则是横向排序。
  • by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名"。
  • ascending:布尔型,True则升序,如果by=['列名1','列名2'],则该参数可以是[True, False],即第一字段升序,第二个降序。
  • inplace:布尔型,是否用排序后的数据框替换现有的数据框。
  • kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
  • na_position:{‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面。

按 b 列升序排序:

# 按 b 列升序排序
print(df1.sort_values(by='b'))复制代码

结果如下:

   b  a  c
2  1  4  1
0  2  3  3
3  2  1  2
1  3  2  8复制代码

先按 b 列降序,再按 a 列升序排序:

# 先按 b 列降序,再按 a 列升序排序
print(df1.sort_values(by=['b','a'],axis=0,ascending=[False,True]))复制代码

结果如下:

   b  a  c
1  3  2  8
3  2  1  2
0  2  3  3
2  1  4  1复制代码

按行 3 升序排列,必须指定 axis = 1

# 按行 3 升序排列,必须指定 axis = 1
print(df1.sort_values(by=3,axis=1))复制代码

结果如下:

   a  b  c
2  4  1  1
0  3  2  3
1  2  3  8
3  1  2  2复制代码

按行 3 升序,行 0 降排列:

# 按行 3 升序,行 0 降排列
print(df1.sort_values(by=[3,0],axis=1,ascending=[True,False]))复制代码






请到「今天看啥」查看全文