【Python系列课程】Pandas(四):数据统计与排序——describe、sort_values、sample
阅读时长16分钟 | 关键词Pandas、describe描述统计、sort_values排序、sample采样、info摘要引言上一篇文章我们学了 DataFrame 的拼接、合并、删除等操作相当于把数据折腾到想要的形状。形状对了接下来就该看懂数据了——这列数据范围多大有没有异常值按某列排序后是什么样这篇文章用五个常用方法帮你快速摸清数据的底细。一、info() 查看数据摘要拿到一个陌生的 DataFrame第一件事就应该是.info()——它用几行输出告诉你数据的骨架结构。importpandasaspdimportnumpyasnp dfpd.DataFrame(data{name:[Tom,Bob,np.nan],age:[18,19,17],height:[167,177,178]},index[n1,n2,n3])print(df)df.info()输出name age height n1 Tom 18 167 n2 Bob 19 177 n3 NaN 17 178 class pandas.core.frame.DataFrame Index: 3 entries, n1 to n3 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 2 non-null object 1 age 3 non-null int64 2 height 3 non-null int64 dtypes: int64(2), object(1) memory usage: 96.0 bytes一眼就能看到有几个缺失值、每列数据类型、内存占用。# verboseFalse 打印简短摘要df.info(verboseFalse)# show_countsFalse 不显示 Non-Null Countdf.info(show_countsFalse)参数说明verboseNone打印完整摘要默认False打印简短摘要show_countsNone显示非空计数默认False不显示二、describe() 描述性统计如果info()是骨架describe()就是体检报告——它把每列数值型数据的核心指标一次列出。dfpd.DataFrame(data{name:[Tom,Bob,Bob],age:[18,19,17],height:[167,177,178]},index[n1,n2,n3])print(df.describe())输出age height count 3.00000 3.000000 mean 18.00000 174.000000 std 1.00000 6.082763 min 17.00000 167.000000 25% 17.50000 172.000000 50% 18.00000 177.000000 75% 18.50000 177.500000 max 19.00000 178.000000默认只统计数值列name被跳过了。如果想看所有列# includeall 显示所有列包括字符串列print(df.describe(includeall))# includeobject 只看字符串列print(df.describe(includeobject))# 组合使用print(df.describe(include[number,object]))指标含义count非缺失值数量mean平均值std标准差min最小值25%第 25 百分位数50%中位数第 50 百分位75%第 75 百分位数max最大值参数详解参数说明percentiles默认[.25, .5, .75]可自定义百分位includeNone只统计数值列all所有列number数值列object字符串列exclude排除指定类型number或object三、常用统计函数除了describe()一键全输出也可以单独调用这些函数dfpd.DataFrame(data{name:[Tom,np.nan,Linda],age:[18,19,17]},index[n1,n2,n3])print(df.count())# 每列非缺失值数量print(df.count(axis1))# 每行非缺失值数量# 构造随机数据dnp.random.normal(size(7,2))dfpd.DataFrame(datad)print(df.max())# 每列最大值print(df.max(axis1))# 每行最大值print(df.min())# 每列最小值print(df.min(axis1))# 每行最小值print(df.mean())# 每列平均值print(df.mean(axis1))# 每行平均值print(df.var())# 每列方差print(df.var(axis1))# 每行方差print(df.std())# 每列标准差print(df.std(axis1))# 每行标准差速查表函数作用默认 axiscount()非缺失值数量0按列max()最大值0按列min()最小值0按列mean()平均值0按列var()方差0按列std()标准差0按列axis0是沿着行方向计算得到每列的统计值axis1是沿着列方向计算得到每行的统计值。四、sample() 随机采样做数据分析时常常需要从大数据集中抽几条看看。sample()就是干这个的。dfpd.DataFrame(data{name:[Tom,Bob,Jack,Linda],age:[18,19,17,21],height:[167,177,178,188]},index[n1,n2,n3,n4])print(df)name age height n1 Tom 18 167 n2 Bob 19 177 n3 Jack 17 178 n4 Linda 21 188# 默认 n1随机抽 1 行print(df.sample())# 按比例抽取75% 3 行print(df.sample(frac0.75))# 指定抽取 2 行print(df.sample(n2))# 有放回采样可能抽到同一行print(df.sample(n2,replaceTrue))# 横向抽 2 列print(df.sample(n2,axis1))# 设置随机种子结果可复现print(df.sample(n2,random_state3))参数说明n采样数量默认 1不能与frac同时用frac采样比例如 0.5 50%不能与n同时用replaceTrue有放回可能重复采样random_state随机种子保证结果可复现axis0 采样行默认1 采样列五、sort_values() 排序数据分析中排序是高频操作。sort_values()可以按一列或多列排序。dfpd.DataFrame({col1:[4,1,2,np.nan,5,2],col2:[2,1,9,8,7,6],col3:[0,1,9,4,2,3],col4:[a,B,c,D,e,1]})print(df)col1 col2 col3 col4 0 4.0 2 0 a 1 1.0 1 1 B 2 2.0 9 9 c 3 NaN 8 4 D 4 5.0 7 2 e 5 2.0 6 3 1# 按单列排序print(df.sort_values(bycol1))# 按多列排序先按 col1再按 col2print(df.sort_values(by[col1,col2]))# 降序排列print(df.sort_values(bycol1,ascendingFalse))# 多列混合排序col1 升序col2 降序print(df.sort_values(by[col1,col2],ascending[True,False]))# 缺失值排到开头默认排末尾print(df.sort_values(bycol1,na_positionfirst))# 按行标签排序axis1by 指定行标签print(df.sort_values(by5,axis1))# 原地排序df.sort_values(bycol1,inplaceTrue)print(df)参数说明by排序依据的列名或列名列表axis0 按行排序1 按列排序ascendingTrue升序默认False降序也可传列表inplaceTrue原地修改na_positionlastNaN 排末尾默认firstNaN 排开头小结这五个方法帮你从不认识数据到把握数据轮廓方法用途记忆口诀info()数据结构摘要拿到数据先 info几行几列心里有数describe()数值描述统计一键体检count/mean/std/min/max 全齐count/max/min/mean...单指标统计需要哪个取哪个axis 控制方向sample()随机采样大数据抽几条看看seed 保可复现sort_values()排序按列升序降序NaN 可放头可放尾下一篇文章我们将探索 Pandas 真正的生产力引擎——groupby()分组聚合和apply()函数应用。这才是数据分析中最强大的武器。本文是「Python从入门到数据分析」系列的第 16 篇。关注我不错过后续更新。