Python Pandas - 描述性统计
大量方法共同计算 DataFrame 上的描述性统计和其他相关操作。 其中大多数是像 sum()、mean() 这样的聚合,但其中一些像 sumsum() 会产生相同大小的对象。 一般来说,这些方法采用 axis 参数,就像 ndarray.{sum, std, ...}, 但轴可以通过名称或整数指定
DataFrame − “index” (axis=0, default), “columns” (axis=1)
让我们创建一个 DataFrame 并在本章中使用该对象进行所有操作。
示例
import pandas as pd
import numpy as np
#Create a Dictionary of 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])
}
#Create a DataFrame
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()
返回请求轴的值的总和。 默认情况下,轴是索引(axis=0)。
import pandas as pd
import numpy as np
#Create a Dictionary of 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])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.sum()
它的输出如下 −
Age 382 Name TomJamesRickyVinSteveSmithJackLeeDavidGasperBe... Rating 44.92 dtype: object
每个单独的列都是单独添加的(附加字符串)。
axis=1
此语法将给出如下所示的输出。
import pandas as pd
import numpy as np
#Create a Dictionary of 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])
}
#Create a DataFrame
df = pd.DataFrame(d)
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
#Create a Dictionary of 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])
}
#Create a DataFrame
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
#Create a Dictionary of 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])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.std()
它的输出如下 −
Age 9.232682 Rating 0.661628 dtype: float64
函数 & 描述
现在让我们了解 Python Pandas 中描述性统计下的函数。 下表列出了重要的功能 −
| 序号 | 函数 | 描述 |
|---|---|---|
| 1 | count() | 非空观测数 |
| 2 | sum() | 值的总和 |
| 3 | mean() | 平均值 |
| 4 | median() | 值的中位数 |
| 5 | mode() | 模式值 |
| 6 | std() | 值的标准差 |
| 7 | min() | 最小值 |
| 8 | max() | 最大值 |
| 9 | abs() | 绝对值 |
| 10 | prod() | Product of Values |
| 11 | cumsum() | 累积总和 |
| 12 | cumprod() | Cumulative Product |
注意 − 由于 DataFrame 是异构数据结构。 泛型操作不适用于所有功能。
sum()、cumsum() 之类的函数可以同时处理数字和字符(或)字符串数据元素而不会出现任何错误。 尽管 n 实践,一般从不使用字符聚合,但这些函数不会抛出任何异常。
abs()、cumprod() 等函数在 DataFrame 包含字符或字符串数据时会抛出异常,因为此类操作无法执行。
汇总数据
describe() 函数计算与 DataFrame 列有关的统计信息摘要。
import pandas as pd
import numpy as np
#Create a Dictionary of 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])
}
#Create a DataFrame
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
此函数给出 mean、std 和 IQR 值。 并且,函数排除了字符列并给出了关于数字列的摘要。 'include' 是用于传递关于需要考虑哪些列进行汇总的必要信息的参数。 获取值列表; 默认为 'number'。
- object − 汇总字符串列
- number − 汇总数值列
- all − 将所有列汇总在一起(不应将其作为列表值传递)
现在,在程序中使用以下语句并检查输出 −
import pandas as pd
import numpy as np
#Create a Dictionary of 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])
}
#Create a DataFrame
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
#Create a Dictionary of 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])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df. describe(include='all')
它的输出如下 −
Age Name Rating
count 12.000000 12 12.000000
unique NaN 12 NaN
top NaN Ricky NaN
freq NaN 1 NaN
mean 31.833333 NaN 3.743333
std 9.232682 NaN 0.661628
min 23.000000 NaN 2.560000
25% 25.000000 NaN 3.230000
50% 29.500000 NaN 3.790000
75% 35.500000 NaN 4.132500
max 51.000000 NaN 4.800000

