资料来源:Python数据分析与展示-MooC ,北京理工大学,嵩天老师
数据排序
方法一:在指定轴上根据索引排序,默认升序
.sort_index(axis=0,ascending=True)
>>> import pandas as pd
>>> import numpy as np
>>> b = pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
>>> b #第一行和第一列分别是列索引、行索引
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19
>>> b.sort_index()
#根据索引排序,默认0轴,即行索引,排成有序的a,b,c,d;并且默认递增排序
0 1 2 3 4
a 5 6 7 8 9
b 15 16 17 18 19
c 0 1 2 3 4
d 10 11 12 13 14
>>> b.sort_index(ascending = False)
#对默认轴--0轴进行降序排序,即得到d,c,b,a
0 1 2 3 4
d 10 11 12 13 14
c 0 1 2 3 4
b 15 16 17 18 19
a 5 6 7 8 9
注:0轴,即纵向轴,表示行轴 ; 1轴,即横向轴,表示列轴。
控制调整列索引,按从大到小排序,示例如下:
>>> b.sort_index(axis = 1,ascending=False)
>#对1轴,即列索引,进行降序排序,即得到4,3,2,1,0
4 3 2 1 0
c 4 3 2 1 0
a 9 8 7 6 5
d 14 13 12 11 10
b 19 18 17 16 15
方法二:在指定轴上根据数值排序,默认升序
.sort_values(axis=0,ascending=True)
Series.sort_values(axis=0,ascending=True)
DataFrame.sort_values(by,axis=1,ascending=True)
by:axis轴上的某个索引或索引列表
>>> b = pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
>>> b
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19
>>> c=b.sort_values(2,ascending=True)
#对 列[2] 中的元素进行升序排序
>>> c
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19
>>> c=c.sort_values('a',axis=1,ascending=False)
#按照 索引为'a' 的一组元素(沿1轴方向)的降序编排整个数组
>>> c
4 3 2 1 0
c 4 3 2 1 0
a 9 8 7 6 5
d 14 13 12 11 10
b 19 18 17 16 15
NaN统一放到排序末尾
#当矩阵大小不同时,运算会主动填充NaN
#任何值与NaN运算均会返回NaN
#NaN不参与数值间的比较
>>> a = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'])
>>> a
0 1 2 3
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
>>> b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
>>> b
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19
>>> c=a+b
>>> c
0 1 2 3 4
a 5.0 7.0 9.0 11.0 NaN
b 19.0 21.0 23.0 25.0 NaN
c 8.0 10.0 12.0 14.0 NaN
d NaN NaN NaN NaN NaN
>>> c.sort_values(2,ascending=False)
0 1 2 3 4
b 19.0 21.0 23.0 25.0 NaN
c 8.0 10.0 12.0 14.0 NaN
a 5.0 7.0 9.0 11.0 NaN
d NaN NaN NaN NaN NaN
>>> c.sort_values(2,ascending=True)
0 1 2 3 4
a 5.0 7.0 9.0 11.0 NaN
c 8.0 10.0 12.0 14.0 NaN
b 19.0 21.0 23.0 25.0 NaN
d NaN NaN NaN NaN NaN
基本统计分析函数
适用于 Series 和 DataFrame 类型
centered 方法 | 说明 |
---|---|
.sum() | 计算数据总和,默认按0轴计算,下同 |
.count() | 非NaN值的数量 |
.mean() .median() | 计算数据的算术平均值、算术中位数 |
.var() .std() | 计算数据的方差、标准差 |
.min() .max() | 计算数据的最大值、最小值 |
.describe() | 针对0轴(各列)的统计汇总 |
对Series类型:
>>> a = pd.Series([9,8,7,6],index = ['a','b','c','d'])
>>> a
a 9
b 8
c 7
d 6
dtype: int64
>>> a.describe()
count 4.000000
mean 7.500000
std 1.290994
min 6.000000
25% 6.750000
50% 7.500000
75% 8.250000
max 9.000000
dtype: float64
>>> type(a.describe())
<class 'pandas.core.series.Series'>
#表示describe()返回一个Series类型数据,则可使用Series类型变量相应的方法来查看其中的参数
>>> a.describe()["count"]
4.0
>>> a.describe()["max"]
9.0
DataFrame类型:
>>>b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
>>>b.describe()
0 1 2 3 4
count 4.000000 4.000000 4.000000 4.000000 4.000000
mean 7.500000 8.500000 9.500000 10.500000 11.500000
std 6.454972 6.454972 6.454972 6.454972 6.454972
min 0.000000 1.000000 2.000000 3.000000 4.000000
25% 3.750000 4.750000 5.750000 6.750000 7.750000
50% 7.500000 8.500000 9.500000 10.500000 11.500000
75% 11.250000 12.250000 13.250000 14.250000 15.250000
max 15.000000 16.000000 17.000000 18.000000 19.000000
>>>type(b.describe())
<class 'pandas.core.frame.DataFrame'>
#DataFrame类型调用下的describe()返回一个DataFrame类型数据
>>>b.describe().ix['max']
0 15.0
1 16.0
2 17.0
3 18.0
4 19.0
Name: max, dtype: float64
适用于Series类型
方法 | 类型 |
---|---|
.argmin() .argmax() | 计算数据最大值、最小值所在位置的索引位置(自动索引) |
.idmin() .idmax() | 计算数据最大值、最小值所在位置的索引位置(自定义索引) |
累计统计函数
适用于Series 和DataFrame类型
方法 | 说明 |
---|---|
.cumsum() | 依次给出前1、2、…、n个数的和 |
.cumprod() | 依次给出前1、2、…、n个数的积 |
.cummax() | 依次给出前1、2、…、n个数的最大值 |
.cummin() | 依次给出前1、2、…、n个数的最小值 |
>>> b
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19
>>> b.cumsum()
0 1 2 3 4
c 0 1 2 3 4
a 5 7 9 11 13
d 15 18 21 24 27
b 30 34 38 42 46
>>> b.cumprod()
0 1 2 3 4
c 0 1 2 3 4
a 0 6 14 24 36
d 0 66 168 312 504
b 0 1056 2856 5616 9576
>>> b.cummin()
0 1 2 3 4
c 0 1 2 3 4
a 0 1 2 3 4
d 0 1 2 3 4
b 0 1 2 3 4
适用于Series 和DataFrame类型,滚动计算(窗口计算)
方法 | 说明 |
---|---|
.rolling(w).sum() | 依次计算相邻w个元素的算术平均值 |
.rolling(w).mean() | 依次计算相邻w个元素的平均值 |
.rolling(w).var() | 依次计算相邻w个元素的方差 |
.rolling(w).std() | 依次计算相邻w个元素的标准差 |
.rolling(w).min() | 依次计算相邻w个元素的最小值 |
.rolling(w).max() | 依次计算相邻w个元素的最大值 |
>>>b
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19
>>> b.rolling(2).sum()
#参数2:表示两行求一次和,其中第一行数与上面的数据(NaN)求和,结果为NaN
0 1 2 3 4
c NaN NaN NaN NaN NaN
a 5.0 7.0 9.0 11.0 13.0
d 15.0 17.0 19.0 21.0 23.0
b 25.0 27.0 29.0 31.0 33.0
>>> b.rolling(3).sum()
#参数3:表示三行求一次和
0 1 2 3 4
c NaN NaN NaN NaN NaN
a NaN NaN NaN NaN NaN
d 15.0 18.0 21.0 24.0 27.0
b 30.0 33.0 36.0 39.0 42.0
数据的相关分析
相关性:
正相关、负相关、不相关
协方差:
符号 | 相关性 |
---|---|
+ | 正相关 |
- | 负相关 |
0 | 独立无关 |
Pearson相关系数:
取值范围为[-1,1]
Pearson相关系数 | 相关性 |
---|---|
0.8~1.0 | 极强相关 |
0.6~0.8 | 强相关 |
0.4~0.6 | 中等程度相关 |
0.2~0.4 | 弱相关 |
0.0~0.2 | 极弱相关或无相关 |
相关分析函数
适用于Series 和 DataFrame 类型
方法 | 说明 |
---|---|
.cov() | 计算协方差矩阵 |
.corr() | 计算相关系数矩阵,Pearson、Spearman 、Kendall等系数 |
求两个数组中数据的相关系数:
>>> hprice=pd.Series([3.04,22.93,12.75,22.6,12.33],index =['2008','2009','2010','2011','2012'])
>>> m2=pd.Series([8.18,18.38,9.13,7.82,6.69],index=['2008','2009','2010','2011','2012'])
>>> hprice.corr(m2)
0.5239439145220387