4 pandas基本功能
4.1-4.5见之前文章
4.6 排名
排名这个功能目前我用的不怎么多,但还是简单说明一下。排名用到了rank方法。默认情况下,rank通过将平均排名分配到每个组来打破平级关系。
rank的常用参数如下,rank(method='', axis='')。当为DataFrame时,axis可以为columns。
rank打破平级常用方法
方法 | 描述 |
---|---|
'average' | 默认:每个组分配平均排名 |
'min' | 对整个组使用最小排名 |
'max' | 对整个组使用最大排名 |
'first' | 按照值在数据中的出现次序排名 |
'dense' | 类似method='min',但是组间排名总是增加1,而不是一个组中相等的元素数量 |
大家可以下面自己练习。
5 描述性统计概述与计算
5.1 描述性统计和汇总统计
pandas对象有一个常用数学、统计学方法的集合,大部分属于规约和汇总统计,并且还有处理缺失值的功能。
下面是对一个DataFrame的一个示例:
import pandas as pd
import numpy as np
frame = pd.DataFrame([[2, np.nan], [7, -3],
[np.nan, np.nan], [0.5, -2]],
index = list('abcd'),
columns = ['one', 'two'])
print(frame)
print('列上求和:\n', frame.sum())
print('行上求和:\n', frame.sum(axis = 1))
print('行上求均值:\n', frame.mean(axis = 1, skipna = False)) #skipnan表示是否跳过缺失值
print('最大值的索引:\n', frame.idxmax()) #查找最大值所在位置
print('列上累计和:\n', frame.cumsum())
print('获取描述性信息:\n', frame.describe()) #获取描述性信息
one two
a 2.0 NaN
b 7.0 -3.0
c NaN NaN
d 0.5 -2.0
列上求和:
one 9.5
two -5.0
dtype: float64
行上求和:
a 2.0
b 4.0
c 0.0
d -1.5
dtype: float64
行上求均值:
a NaN
b 2.00
c NaN
d -0.75
dtype: float64
最大值的索引:
one b
two d
dtype: object
列上累计和:
one two
a 2.0 NaN
b 9.0 -3.0
c NaN NaN
d 9.5 -5.0
获取描述性信息:
one two
count 3.000000 2.000000
mean 3.166667 -2.500000
std 3.403430 0.707107
min 0.500000 -3.000000
25% 1.250000 -2.750000
50% 2.000000 -2.500000
75% 4.500000 -2.250000
max 7.000000 -2.000000
对于任何方法,都有axis和skipna这两个参数,在具体情况中具体使用。
描述性统计和汇总统计函数表
方法 | 描述 |
---|---|
count | 计算非NA个数 |
describe | 计算描述性统计信息 |
min, max | 最小值,最大值 |
argmin, argmax | 最小值,最大值所在索引位置 |
idxmin, idxmax | 最小值,最大值索引标签 |
quantile | 计算样本从0到1间的分位数 |
sum | 加和 |
mean | 均值 |
median | 中位数(50%分位数) |
prod | 所有值的积 |
var | 值的样本方差 |
std | 值的样本标准差 |
skew, kurt | 样本偏度(第三时刻)、样本峰度(第四时刻)的值 |
cumsum | 累计值 |
cummin, cummax | 累计值的最小值和最大值 |
cumprod | 值的累计积 |
pct_change | 计算百分比 |
5.2 相关性和协方差
相关性和协方差分别用到了corr和cov函数。例如,frame['one'].corr(frame['two'])表示frame的'one'和'two'两列的相关性;frame['one'].cov(frame['two'])表示frame两列的协方差;利用corrwith来计算每一列对某一列的相关性,例如frame.corrwith(frame['two'])计算每一列对two列的的相关性,也可以传入axis='columns'逐行计算。
5.3 唯一值、计数和成员属性
一维Series也有一些统计方法,例如:
1、计算唯一值,unique方法
series1 = pd.Series(list('abcdacdabcabc'))
unique = series1.unique() #计算唯一值
print('唯一值:\n', unique)
唯一值:
['a' 'b' 'c' 'd']
2、计算包含值的个数,并降序排列
pd.value_counts(series1.values, sort = True) #计算值并降序
c 4
a 4
b 3
d 2
dtype: int64
3、过滤操作——isin方法
mask = series1.isin(['a', 'c']) #过滤操作
print('过滤后的值:\n', series1[mask]) #子集
过滤后的值:
0 a
2 c
4 a
5 c
7 a
9 c
10 a
12 c
某些情况下,可能要计算DataFrame多个相关列的直方图,使用方法如下:
data = pd.DataFrame({'A':[1, 5, 4, 100, 5],
'B':[4, 100, 3, 2, 1],
'C':[2, 3, 101, 5, 2]})
result = data.apply(pd.value_counts).fillna(0)
result
A B C
1 1.0 1.0 0.0
2 0.0 1.0 2.0
3 0.0 1.0 1.0
4 1.0 1.0 0.0
5 2.0 0.0 1.0
100 1.0 1.0 0.0
101 0.0 0.0 1.0
如结果所示,行标签为所有列的不同值,数值则是不同值在每个列出现次数。
至此,pandas基础操作已经全部完成,熟练运用这些方法能大大减少编程的复杂度,也能提高效率;下一篇将对时间类型做一个专题。
本文分享自 python数据可视化之美 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!