在家为国家作贡献太无聊,不如跟我一块儿学点 Pythonhtml
人生苦短,我用 Pythonpython
前文传送门:git
小白学 Python 数据分析(1):数据分析基础github
小白学 Python 数据分析(2):Pandas (一)概述数据结构
小白学 Python 数据分析(3):Pandas (二)数据结构 Seriesdom
小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame学习
最近这个系列有段时间没更新,理由也就不找了,总结就一点,懒!懒得学习!ui
我就是这么一个能敢于发现而且认可错误的人。spa
不过从这篇开始,我又恢复更新了,手动滑稽一下:)翻译
接下来小编要分享一些 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()
。
用途:既能够根据列数据,也可根据行数据排序。
注意:必须指定by参数,即必须指定哪几行或哪几列;没法根据 index 和 columns 排序(由 sort_index()
执行)
语法:DataFrame.sortvalues(by, axis=0, ascending=True, inplace=False, kind='quicksort', naposition='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]))复制代码
结果以下:
a c b
2 4 1 1
0 3 3 2
1 2 8 3
3 1 2 2复制代码
用途:默认根据行标签对全部行排序,或根据列标签对全部列排序,或根据指定某列或某几列对行排序。
注意:df.sort_index()
能够完成和 df.sort_values()
彻底相同的功能,但 python 更推荐用只用 df.sort_index()
对 index 和 columns 排序,其余排序方式用 df.sort_values()
。
语法:DataFrame.sortindex(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', naposition='last', sort_remaining=True, by=None)
默认按「行标签」升序排列:
# 默认按「行标签」升序排列
print(df1.sort_index())复制代码
结果以下:
b a c
0 2 3 3
1 3 2 8
2 1 4 1
3 2 1 2复制代码
按「列标签」升序排列:
# 按「列标签」升序排列
print(df1.sort_index(axis=1))复制代码
结果以下:
a b c
2 4 1 1
0 3 2 3
1 2 3 8
3 1 2 2复制代码
还有两个按列排序的例子:
# 先按 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]))复制代码
结果以下:
b a c
2 1 4 1
3 2 1 2
0 2 3 3
1 3 2 8
b a c
2 1 4 1
0 2 3 3
1 3 2 8
3 2 1 2复制代码
虽然正常排序,可是程序运行后也出现了警告,以下:
FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=...)复制代码
这个警告的意思是不推荐咱们使用 sort_index()
使用 by 这个参数,推荐咱们使用 sort_values()
这个方法。
老规矩,全部的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便你们取用。
https://www.pypandas.cn/docs/getting_started/10min.html
https://www.jianshu.com/p/f0ed06cd5003