Python Pandas 描述性统计

Pandas 使用大量的方法计算 基于DataFrame 数据的描述性统计,和其他一些相关的操作。其中大多数是sum()、mean() 之类的聚合函数。但其中一些函数(例如sumsum() )会生成相同大小的对象。一般来说,这些方法采用轴参数,就像ndarray.{sum, std, ...} 一样,但轴可以通过名称或整数指定。

DataFrame - “行索引”(轴= 0,默认),“列”(轴= 1)

接下来让我们创建一个 DataFrame 数据,然后用这个数据演示一下这些函数的应用

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df)

运行示例

运行结果如下

    Age    Name  Rating
0    25     Tom    4.23
1    26   James    3.24
2    25   Ricky    3.98
3    23     Vin    2.56
4    30   Steve    3.20
5    29   Smith    4.60
6    23    Jack    3.80
7    34     Lee    3.78
8    40   David    2.98
9    30  Gasper    4.80
10   51  Betina    4.10
11   46  Andres    3.65

sum()

返回请求轴的值的总和。默认情况下,轴是索引(轴=0)。

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df.sum())

运行示例

运行结果如下

Name      TomJamesRickyVinSteveSmithJackLeeDavidGasperBe...
Age                                                     382
Rating                                                44.92
dtype: object

每个单独的列都是单独添加的(附加字符串)。

接下来我们指定 axis = 1

print(df.sum(1))

运行示例

结果如下

0     29.23
1     29.24
2     28.98
3     25.56
4     33.20
5     33.60
6     26.80
7     37.78
8     42.98
9     34.80
10    55.10
11    49.65
dtype: float64

mean()

返回平均值

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df.mean())

运行示例

运行结果如下

Age       31.833333
Rating     3.743333
dtype: float64

std()

返回数值列的 Bressel 标准差。

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df.std())

运行示例

运行结果如下

Age       9.232682
Rating    0.661628
dtype: float64

方法说明

上面一些示例,我们大概了解了一些统计性的方法,下面我们列出Pandas 中描述性统计下的函数

序号 方法 描述
1 count() 非空元素的数量
2 sum() 值的总和
3 mean() 平均值
4 median() 值的中位数
5 mode() 值模式
6 std() 值的标准偏差
7 min() 最小值
8 max() 最大值
9 abs() 绝对值
10 prod() 返回值的乘积
11 cumsum() 和的累积
12 cumprod() 乘积的累积

注意- 由于 DataFrame 是异构数据结构。通用操作不适用于所有函数。

  • sum()、cumsum() 之类的函数可以处理数字和字符(或)字符串数据元素,不会出现任何错误。
  • 当 DataFrame 包含字符或字符串数据时,abs()、cumprod()等函数会抛出异常,因为无法执行此类操作。

汇总数据

describe() 函数计算关于所述数据帧列的统计信息的摘要。

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df.describe())

运行示例

运行结果如下

            Age     Rating
count  12.000000  12.000000
mean   31.833333   3.743333
std     9.232682   0.661628
min    23.000000   2.560000
25%    25.000000   3.230000
50%    29.500000   3.790000
75%    35.500000   4.132500
max    51.000000   4.800000

此函数给出均值、标准差和IQR值。并且,函数排除了字符列并给出了关于数字列的摘要。include 是用于指定有关需要考虑哪些列进行汇总的必要信息的参数。

获取值列表;默认情况下,“number”。

  • object - 汇总字符串列
  • number - 汇总数字列
  • all - 将所有列汇总在一起(不应将其作为列表值传递)

现在,在程序中使用以下语句并检查输出

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df.describe(include=['object']))

运行示例

运行结果如下

         Name
count      12
unique     12
top     Ricky
freq        1

再看下面这个示例

import pandas as pd
import numpy as np

#创建一个 Series 字典
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

df = pd.DataFrame(d)
print(df.describe(include=['number']))

运行示例

运行结果如下

             Age     Rating
count  12.000000  12.000000
mean   31.833333   3.743333
std     9.232682   0.661628
min    23.000000   2.560000
25%    25.000000   3.230000
50%    29.500000   3.790000
75%    35.500000   4.132500
max    51.000000   4.800000

查看笔记

扫码一下
查看教程更方便