python数据分析与展示-Pandas数据特征分析


北理工嵩天老师的慕课课程 《python数据分析与展示》学习笔记!

1. 数据的排序

1.1 sort_index()方法

.sort_index() 方法在指定轴上根据索引进行排序,默认为零轴,升序

.sort_index(axis=0, ascending=True)

>>> import pandas as pd
>>> import numpy as np
>>> a = pd.DataFrame(np.arange(20).reshape(4,5), index=['c','a','d','b'])
>>> a
    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
> # 默认按照0轴索引升序排序
>>> a.sort_index()
    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
> # 规定按照降序排序
>>> a.sort_index(ascending=False)
    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
> # 规定在1轴上按照降序排序
>>> a.sort_index(axis=1, ascending=False)
    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

1.2 sort_values()方法

.sort_values() 方法在指定轴上根据数值进行排序,默认为零轴,升序

Series.sort_values(axis=0, ascending=True)
DataFrame.sort_values(by, axis=0, ascending=True)
by: axis轴上的某个索引或索引列表

>>> b = pd.DataFrame(np.arange(20).reshape(4,5), index=['a','b','c','d'])
>>> b
    0   1   2   3   4
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
> # 默认在0轴上,指定对索引为2的那一列按照降序排序
>>> b.sort_values(2, ascending=False)
    0   1   2   3   4
d  15  16  17  18  19
c  10  11  12  13  14
b   5   6   7   8   9
a   0   1   2   3   4
> # 指定在1轴上,对索引为‘c’的那一行进行降序排序
>>> b.sort_values('a',axis=1, ascending=False)
    4   3   2   1   0
a   4   3   2   1   0
b   9   8   7   6   5
c  14  13  12  11  10
d  19  18  17  16  15

1.3 对排序时空值的处理

NaN统一放到排序末尾

>>> b = pd.DataFrame(np.arange(20).reshape(4,5), index=['a','b','c','d'])
>>> a = pd.DataFrame(np.arange(12).reshape(3,4), index=['a','b','c'])
>>> c = b-a
>>> c
     0    1    2    3   4
a  0.0  0.0  0.0  0.0 NaN
b  1.0  1.0  1.0  1.0 NaN
c  2.0  2.0  2.0  2.0 NaN
d  NaN  NaN  NaN  NaN NaN
>>> c.sort_values(2, ascending=False)
     0    1    2    3   4
c  2.0  2.0  2.0  2.0 NaN
b  1.0  1.0  1.0  1.0 NaN
a  0.0  0.0  0.0  0.0 NaN
d  NaN  NaN  NaN  NaN NaN

2. 数据的基本统计分析

适用于Series和DataFrame类型:

方法说明
.sum()计算数据的总和,按0轴计算,下同
.count()非NaN值的数量
.mean() .median()计算数据的算数平均值、算数中位数
.var() .std()计算数据的方差、标准差
.min() .max()计算数据的最小值、最大值

适用于Series类型的方法:

方法说明
.argmin() .argmax()计算数据最大值、最小值所在位置的索引(返回自动索引
.idxmin() .idxmax()计算数据最大值、最小值所在位置的索引(返回自定义索引

适用于Series和DataFrame类型:

方法说明
.describe()针对0轴(各列)的统计汇总
  1. 对Series类型的.describe()方法:
>>> a = pd.Series([9,8,7,6], index=['a','b','c','d'])
>>> a
a    9
b    8
c    7
d    6
dtype: int64
> # describe()把统计值一次性输出出来
>>> 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
> # describe()输出的为Series类型,可以对其使用Series类型的方法。
>>> type(a.describe())
<class 'pandas.core.series.Series'>
>>> a.describe()['count']
4.0
>>> a.describe()['min']
6.0
  1. 对DataFrame类型的.describe()方法:
>>> 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
> # describe()输出的为DataFrame类型,可以对其使用DataFrame类型的方法。
>>> type(b.describe())
<class 'pandas.core.frame.DataFrame'>
>>> b.describe()[2]
count     4.000000
mean      9.500000
std       6.454972
min       2.000000
25%       5.750000
50%       9.500000
75%      13.250000
max      17.000000
Name: 2, dtype: float64
> # 这里注意一下DataFrame获取某一行数据时的方法
>>> b.describe().ix['max']
0    15.0
1    16.0
2    17.0
3    18.0
4    19.0
Name: max, dtype: float64

3. 数据的累计统计分析

适用于Series和DataFrame类型:

方法说明
.cumsum()依次给出前1、2、…、n个数的和
.cumprod()依次给出前1、2、…、n个数的积
.cummax()依次给出前1、2、…、n个数的最大值
.cummin()依次给出前1、2、…、n个数的最小值
>>> a = pd.DataFrame(np.arange(20).reshape(4,5), index=['a','b','c','d'])
>>> a
    0   1   2   3   4
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
>>> a.cumsum()
    0   1   2   3   4
a   0   1   2   3   4
b   5   7   9  11  13
c  15  18  21  24  27
d  30  34  38  42  46
>>> a.cumprod()
   0     1     2     3     4
a  0     1     2     3     4
b  0     6    14    24    36
c  0    66   168   312   504
d  0  1056  2856  5616  9576
>>> a.cummax()
    0   1   2   3   4
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
>>> a.cummin()
   0  1  2  3  4
a  0  1  2  3  4
b  0  1  2  3  4
c  0  1  2  3  4
d  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() .max()依次计算相邻w个元素的最小值和最大值
>>> b = pd.DataFrame(np.arange(20).reshape(4,5), index=['a','b','c','d'])
>>> b
    0   1   2   3   4
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
> # 每一行元素都和他的上一行元素相加。第一行的上一行为NaN,相加还为NaN
>>> b.rolling(2).sum()
      0     1     2     3     4
a   NaN   NaN   NaN   NaN   NaN
b   5.0   7.0   9.0  11.0  13.0
c  15.0  17.0  19.0  21.0  23.0
d  25.0  27.0  29.0  31.0  33.0
>>> b.rolling(3).sum()
      0     1     2     3     4
a   NaN   NaN   NaN   NaN   NaN
b   NaN   NaN   NaN   NaN   NaN
c  15.0  18.0  21.0  24.0  27.0
d  30.0  33.0  36.0  39.0  42.0

4. 数据的相关分析

相关性:

  • X增大,Y增大,两个变量正相关
  • X增大,Y减小,两个变量负相关
  • X增大,Y无视,两个变量不相关
方法说明
.cov()计算协方差矩阵
.corr()计算相关系数矩阵,Pearson、Spearman、Kendall等系数

协方差
在这里插入图片描述

协方差>0,X和Y正相关
协方差<0,X和Y负相关
协方差=0,X和Y独立无关

Pearson相关系数r (-1,1):
在这里插入图片描述

0.9-1.0:极强相关,0.6-0.8:强相关,0.4-0.6:中等程度相关
0.2-0.4:弱相关,0.0-0.2:极弱相关或无相关

>>> hprice = pd.Series([3.04,22.93,12.75,22.6,12.33], index=['a','b','c','d','e'])
>>> m2 = pd.Series([8.18,18.38,9.13,7.82,6.69], index=['a','b','c','d','e'])
>>> hprice.corr(m2)
0.5239439145220387
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值