看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Pandas 可以对 Series 与 DataFrame 进行快速的描述性统计,如求和、平均数、最大值、方差等,是最基础也是最实用的统计方法。
注:本文所使用的 df
和 s
是数据信息一文中的数据。
会返回一个有多个行的所有数字列的统计表,每个行是一个统计指标,有总数、平均数、标准差、最大最小值、四分位数等,对我们初步了解数据还是很有作用。
df.describe()
'''
Q1 Q2 Q3 Q4
count 100.000000 100.000000 100.000000 100.000000
mean 49.200000 52.550000 52.670000 52.780000
std 29.962603 29.845181 26.543677 27.818524
min 1.000000 1.000000 1.000000 2.000000
25% 19.500000 26.750000 29.500000 29.500000
50% 51.500000 49.500000 55.000000 53.000000
75% 74.250000 77.750000 76.250000 75.250000
max 98.000000 99.000000 99.000000 99.000000
'''
如果无数字:
pd.Series(['a', 'b', 'c', 'c']).describe()
'''
count 4
unique 3
top c
freq 2
dtype: object
'''
如果是一个时间类型则会按时间相关的如开始结束时间、周期等信息。
s2 = pd.Series([
np.datetime64("2000-01-01"),
np.datetime64("2010-01-01"),
np.datetime64("2010-02-01")
])
s2.describe()
'''
count 3
unique 3
top 2000-01-01 00:00:00
freq 1
first 2000-01-01 00:00:00
last 2010-02-01 00:00:00
dtype: object
'''
# 1.1 的用法
(pd.Series(pd.date_range('2000-01-01', '2000-05-01'))
.describe(datetime_is_numeric=True)
)
还可以自己指定分位数(一般情况下,默认值包含中位数)等:
df.describe(percentiles=[.05, .25, .75, .95])
df.describe(include=[np.object, np.number]) # 指定类型
df.describe(exclude =[np.object]) # 排除类型
数学计算是最常见的统计方法,比如我们要知道列的平均数据:
df.mean()
'''
Q1 49.20
Q2 52.55
Q3 52.67
Q4 52.78
dtype: float64
'''
# 看每行
df.mean(1).head()
'''
0 49.50
1 41.75
2 54.75
3 84.50
4 65.25
dtype: float64
'''
# Q1 列的平均值
df.Q1.mean()
# 49.2
一般 DataFrame 计算后为一个 Series,Series 计算后为一个定值。
Pandas 内置很多数学计算方法:
df.mean() # 返回所有列的均值
df.mean(1) # 返回所有行的均值,下同
df.corr() # 返回列与列之间的相关系数
df.count() # 返回每一列中的非空值的个数
df.max() # 返回每一列的最大值
df.min() # 返回每一列的最小值
df.abs() # 绝对值
df.median() # 返回每一列的中位数
df.std() # 返回每一列的标准差, 贝塞尔校正的样本标准偏差
df.var() # 无偏方差
df.sem() # 平均值的标准误差
df.mode() # 众数
df.prod() # 连乘
df.mad() # 平均绝对偏差
df.cumprod() # 累积连乘,累乘
df.cumsum(axis=0) # 累积连加,累加
df.nunique() # 去重数量,不同值的量
df.idxmax() # 每列最大的值的索引名
df.idxmin() # 最小
df.cummax() # 累积最大值
df.cummin() # 累积最小值
df.skew() # 样本偏度 (第三阶)
df.kurt() # 样本峰度 (第四阶)
df.quantile() # 样本分位数 (不同 % 的值)
一些特殊的说明:
# 很多支持指定行列(默认是 axis=0 列)等参数
df.mean(1) # 按行计算
# 很多支持
df.sum(0, skipna=False) # 否要排除缺失数据
# 很多支持
df.sum(level='blooded') # 索引级别
df.sum(level=0)
# 如果有空值总共算几
df.sum(min_count=1)
# 按行计算,只计算数字类型
df.sum(1, numeric_only=True)
# 可自定义相关性函数
def histogram_intersection(a, b):
v = np.minimum(a, b).sum().round(decimals=1)
return v
df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)],
columns=['dogs', 'cats'])
df.corr(method=histogram_intersection)
这些函数都是我们今后用于统计计算的基础。
更新时间:2024-08-19 12:27:55 标签:pandas 统计