这里介绍了几种创建Series和DataFrame的方式,这里介绍了几种查找数据的方式,本文继续介绍pandas中几种常用的汇总和计算描述统计
先创建一个DataFrame:
import pandas as pd
data = {'name': ['apolo', 'adm', 'bolon', 'ali', 'cathy', 'devn', 'elov'],
'age': [18, 29, 32, 28, 34, 19, None],
'sex': ['male', 'female', 'male', 'male', 'female', 'male', 'female'],
'weight': [67, 78, 87, 59, 90, 101, 78],
'height': [170, 189, 190, 179, None, 160, 185]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e','f', 'g'])
df
输出:
name age sex weight height
a apolo 18.0 male 67 170.0
b adm 29.0 female 78 189.0
c bolon 32.0 male 87 190.0
d ali 28.0 male 59 179.0
e cathy 34.0 female 90 NaN
f devn 19.0 male 101 160.0
g elov NaN female 78 185.0
df.sum()
不加任何参数,直接进行求和是按列求和,即计算每一列的和。对于非数值型数据,是将字符串直接拼在一起。此时会自动忽略null值。可以通过skipna=False
设置为不忽略null值,此时带有null值的列的和会变为null值。
输出:是个Series对象
name apoloadmbolonalicathydevnelov
age 160.0
sex malefemalemalemalefemalemalefemale
weight 560
height 1073.0
dtype: object
df.sum(axis=1)
指定参数axis=1
,则是对行求和,即计算每一行的和。此时会总动选择数值型的数据进行求和。此时会自动忽略null值。可以通过skipna=False
设置为不忽略null值,此时带有null值的行的和会变为null值。
输出:是个Series对象
a 255.0
b 296.0
c 309.0
d 266.0
e 124.0
f 280.0
g 263.0
dtype: float64
输出:不忽略null值,df.sum(axis=1, skipna=False)
a 255.0
b 296.0
c 309.0
d 266.0
e NaN
f 280.0
g NaN
dtype: float64
pandas中还有一些其它的方法和sum的用法类似,即默认是列,可通过axis=1
改为对行,通过skipna=False
设置为不忽略null值,这些方法包括以下:
方法 | 说明 |
---|---|
df.mean() | 求平均值 |
df.min()和df.max() | 求最小值和最大值,对于字符串类型的,最小值返回按字母升序,当不忽略null值时,最小值最大值都是NaN |
df.var() | 求样本值的方差 |
df.std() | 求样本值的标准差 |
df.count() | 计算非null值的数量,同样可通过axis=1指定行 |
df.median() | 计算中位数 |
df.skew() | 样本值的偏度,即三阶矩 |
df.kurt() | 样本值的峰度,即四阶矩 |
df.cumsum() | 样本值的累计和,但不能将字符串和数值型累计和,即在令axis=1时,要注意,返回的数据结构和原数据一样,只不过每个元素变为累计和 |
df.cumprod() | 累计积,注意累计积不能处理字符型数据,但累计和可以 |
df.diff() | 计算一阶差分,同样不能计算字符型,会报错 |
相关系数和协方差是统计中很基础也很重要的统计量,下面分Series和DataFrame计算相关系数和协方差。
对于DataFrame的数据,直接利用df.corr()和df.cov()计算相关系数和协方差。
相关系数矩阵:其中参数method可取{‘pearson’, ‘kendall’, ‘spearman’},默认为pearson相关系数。
df.corr()
输出:
age weight height
age 1.000000 0.057227 0.917196
weight 0.057227 1.000000 -0.273292
height 0.917196 -0.273292 1.000000
此外,还可以用df.corrwith()
计算与其中一列的相关系数:
df.corrwith(df['age'])
输出:
age 1.000000
weight 0.057227
height 0.917196
dtype: float64
协方差矩阵:
df.cov()
输出:
age weight height
age 44.666667 5.933333 73.850000
weight 5.933333 201.333333 -47.733333
height 73.850000 -47.733333 139.766667
当整个的DataFrame很大,但我们只想比较其中两个或多个特征的相关系数和协方差时,可按照下面的方式进行计算。
相关系数:
df['age'].corr(df['weight'])
输出:
0.05722673972479561
协方差:
df['age'].cov(df['weight'])
输出:
5.933333333333334
对于Series数据结构,可以计算它有多少个不同的元素,即去重;还可以计算每个元素出现的频率。
df['sex'].unique()
输出:DataFrame没有这个方法。
array(['male', 'female'], dtype=object)
df['sex'].value_counts()
输出:DataFrame没有这个方法,默认降序排列。
male 4
female 3
Name: sex, dtype: int64