pandas入门:描述性统计的概述与计算、相关性和协方差、唯一值、计数和成员属性

描述性统计的概述与计算

pandas对象装配了一个常用函数、统计学方法的集合。其中大部分属于 归约 或 汇总统计 的类别,这些方法从 dataframe 的行或列中抽取一个 series 或 一系列值的单个值(如总和和平均值)。与 numpy 数组中的类似方法相比,它们内建了处理缺失值的功能。考虑一个小型 dataframe

df = pd.DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=['a','b','c','d'],columns=['one','two'])
df
      one	two
a	1.40	NaN
b	7.10	-4.5
c	NaN	NaN
d	0.75	-1.3

df.sum()         # 可以传入axis = 'columns' 或 1 ,对各列的值相加。
one    9.25
two   -5.80
dtype: float64

# 除非操作的整行或整列都是 NA,否则NA的值都是自动排除的,可以通过禁用 skipna 来实现不排除NA 值。
df.mean(axis=1)
a    1.400
b    1.300
c      NaN # 这里的两个都是 NA 
d   -0.275
dtype: float64

df.mean(axis=1,skipna=False)
a      NaN        # 有一个NA 就是啦
b    1.300
c      NaN
d   -0.275
dtype: float64
归约方法可选参数 描述
axis 归约轴,0为行,1为列
skipna 排除缺失值,默认是 True
level 如果轴是多层索引的 ( MultiIndex) ,该参数可以缩减分组层级。。
df.idxmax()       # 返回间接统计信息,比如这个最大值的索引
one    b
two    d
dtype: object

df.cumsum()             # 积累型方法。积累列
	one	two
a	1.40	NaN
b	8.50	-4.5
c	NaN	NaN
d	9.25	-5.8


df.describe()             # 这个厉害,一次性产生多个汇总统计
         one	two
count	3.000000	2.000000
mean	3.083333	-2.900000
std	3.493685	2.262742
min	0.750000	-4.500000
25%	1.075000	-3.700000
50%	1.400000	-2.900000          # 额 这是啥。。。。。
75%	4.250000	-2.100000
max	7.100000	-1.300000

obj=pd.Series(['a','a','v','c']*4)        # 对非数值类型的数据,产生另一种汇总统计。
obj.describe()
count     16
unique     3
top        a
freq       8
dtype: object

在这里插入图片描述

相关性和协方差

一些汇总统计,比如这相关性和协方差,是由多个参数计算出来的。那么问题来了。。。什么是相关性和协方差呢脑补链接

series 的 corr 方法计算两个series 中重叠的,非NA 的,按索引对齐的值的相关性, cov 就是协方差


frame=pd.DataFrame({'b':[4.3,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-2.5]})
frame
b	a	c
0	4.3	0	-2.0
1	7.0	1	5.0
2	-3.0	0	8.0
3	2.0	1	-2.5

frame['b'].corr(frame['a'])
0.5240763713323049

frame['b'].cov(frame['a'])
1.2833333333333332

frame.corr()       # 对 dataframe 的corr cov 方法会分别以 dataframe 的形式返回相关性和协方差矩阵。
       b	a	c
b	1.000000	0.524076	-0.369942
a	0.524076	1.000000	-0.194220
c	-0.369942	-0.194220	1.000000


# 使用 dataframe 的corrwith 方法,可以计算出 dataframe 的行或列与另一个序列或 dataframe 的相关型。
# 该方法传入一个 series 方法时,会返回一个含有为每个列计算出来的相关性。
frame = pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
frame.corrwith(frame['d'])
b   -0.846939
d    1.000000
e    0.442531
dtype: float64

# 传入一个 dataframe 时,会计算匹配到列名的相关性数值,
frame.corrwith(np.abs(frame))
b    0.447732
d   -1.000000
e   -0.462654
dtype: float64           # 应该就是相同列名之间计算

frame2=frame.reindex(['b','d','a'],axis=1)
frame2
	b	d	a
utah	0.492560	-1.186729	NaN
ohio	-0.048141	0.148286	NaN
texas	1.347424	-0.626166	NaN
oregon	0.756698	0.098876	NaN
frame.corrwith(frame2)
frame.corrwith(frame2)
1
frame.corrwith(frame2)
b    1.0
d    1.0
a    NaN
e    NaN
dtype: float64

唯一值、计数和成员属性

obj=pd.Series(['c','a','d','a','a','b','b','c','c'])

obj.unique()                   # 给出 series 中的唯一值
array(['c', 'a', 'd', 'b'], dtype=object)     # 并不是按顺序的,如果需要使用 .sort()

obj.value_counts()      # 这个返回 series 包含的值的个数
a    3
c    3
b    2               # 返回的 按找数量排序
d    1              # 等价于 pd.value_counts(obj.values) 这是一个顶层方法。
dtype: int64


# isin 执行向量化的成员属性检擦,还可以将数据集以sereis dataframe 一列的形式过滤为数据集的子集
mask=obj.isin(['b','c'])
mask
0     True
1    False
2    False
3    False
4    False
5     True
6     True
7     True
8     True
dtype: bool

obj[mask]
0    c
5    b        # 就是筛选出来的子集
6    b
7    c
8    c
dtype: object


# 与 isin 相关的 Index.get_indexer 方法,可以提供一个索引数组,这个数组可以将可能非唯一值数组转换成另一个唯一值数组
to_match=pd.Series(['c','a','b','b','c','a'])
unique_vals=pd.Series(['c','b','a'])
pd.Index(unique_vals).get_indexer(to_match)
array([0, 2, 1, 1, 0, 2], dtype=int64)    # c 0 b 1 a 2 。。。这就很迷

# 计算 dataframe 多个相关列的直方图
data=pd.DataFrame({'qu1':[1,2,4,3,4],'qu2':[2,3,1,2,3],'qu3':[1,5,2,4,4]})
data
 qu1	qu2	qu3
0	1	2	1
1	2	3	5
2	4	1	2
3	3	2	4
4	4	3	4

data.apply(pd.value_counts).fillna(0)
	qu1	qu2	qu3
1	1.0	1.0	1.0
2	1.0	2.0	1.0
3	1.0	2.0	0.0
4	2.0	0.0	2.0        # 这些行标签就是所有列中出现的不同值,数值就是这些不同值在每个列中出现的次数
5	0.0	0.0	1.0

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46192930/article/details/106497145