4.4 pandas的统计功能

本文详细介绍了Pandas的统计功能,包括数值型特征的统计、类别型特征的描述性统计和如何剔除全为空值或所有元素取值相同的列。通过`dataframe.info()`、`describe()`等方法展示了统计分析的基本操作,以及`value_counts`用于频数统计,同时提供了一个函数用于删除异常数据列。

4.4 pandas的统计功能

Pandas拥有一组常用的数学和统计方法,可以对 Series 与 DataFrame 进行快速的描述性统计,如求和、平均数、最大值、方差等,是最基础也是最实用的统计方法。一般来说,这些方法采用轴参数axis,就像NumPy数组的统计方法,但轴可以通过名称或整数来指定,对于DataFrame而言:

  • axis=0,默认,表示按行index统计
  • axis=1,表示按列columns统计

按哪个axis,就是这个axis要动起来(类似被for遍历),其他的axis保持不动

Pandas的axis参数:

1、axis = 0

  • 如果是单行操作,就是指某一行
  • 如果是聚合操作,指的就是跨行

2、axis = 1

  • 如果是单列操作,就是指某一列
  • 如果是聚合操作,指的就是跨列

In [1]:

import numpy as np
import pandas as pd

In [2]:

#读取学生信息
st = pd.read_excel('data/stinfo.xlsx',index_col=0)
st.head(3)

Out[2]:

姓名 学号 出生日期 年龄 籍贯 性别 身高 体重 linux python 网络 数据库 IT基础
0 甲一 50 2001年1月1日 19 福田 172 69 92 90 82 NaN 80
1 乙二 51 1999年2月2日 21 龙岗 180 77 95 88 85 NaN 80
2 丙三 52 2002年3月3日 18 南山 160 49 85 91 93 NaN 80

In [3]:

st.ndim

Out[3]:

2

In [4]:

st.shape

Out[4]:

(11, 13)

In [5]:

st.size

Out[5]:

143

4.4.1 数值型特征的统计

数值型数据的描述性统计主要包括了计算数值型数据的完整情况、最小值、均值、中位数、最大值、四分位数、极差、标准差、方差、协方差和变异系数等。在NumPy库中一些常用的统计学函数如下表所示。

pandas库基于NumPy,自然也可以用这些函数对数据框进行描述性统计。

In [6]:

np.max(st['linux'])#统计linux列的最大值

Out[6]:

98

In [7]:

np.median(st['linux'])#统计linux列的中位数

Out[7]:

85.0

In [8]:

int(np.mean(st['身高']))#统计身高列的均值

Out[8]:

169

In [9]:

np.sort(st['体重'])#体重列排序

Out[9]:

array([48, 49, 50, 53, 56, 63, 69, 70, 75, 77, 82], dtype=int64)
  • Pandas统计函数

Pandas内置很多数学计算方法,如计算均值 ,st['linux技术成绩'].mean()。

In [10]:

st['linux'].mean().astype(int)

Out[10]:

83

In [11]:

st['linux'].max()#统计linux列的最大值

Out[11]:

98

In [12]:

st['linux'].median()#统计linux列的中位数

Out[12]:

85.0

pandas提供的方法describe()能够一次性得出dataframe所有数值型特征的非空值数目、均值、四分位数、标准差等。返回一个有多个行的所有数值列的统计表,每个行是一个统计指标,对我们初步了解数据还是很有作用。 

In [13]:

st.describe()

Out[13]:

学号 年龄 身高 体重 linux python 网络 数据库 IT基础
count 11.000000 11.000000 11.000000 11.000000 11.000000 11.000000 11.000000 0.0 11.0
mean 55.000000 19.454545 169.454545 62.909091 83.636364 82.181818 77.727273 NaN 80.0
std 3.316625 0.934199 8.618163</
<think>我们被要求解释pandas中info()函数的功能和用法。根据用户的问题,他们想了解这个函数的具体使用说明和功能介绍。注意:用户提到了三个引用,但这些引用是关于窗口函数、常用函数和assign函数的,与info函数没有直接关系。因此,我们将基于我们对pandas的知识来回答。pandas中的info()函数是DataFrame的一个方法,用于提供关于数据集的简明摘要。它通常用于数据探索阶段,快速了解数据的基本情况。功能:1.显示数据集的类型(DataFrame或Series)。2.显示数据集的索引范围(行数)。3.显示每一列的非空值数量、数据类型和内存使用情况。4.显示数据集的总内存使用量。5.显示列的数据类型分布(如多少列是整数,多少列是浮点数等)。用法:基本语法:`DataFrame.info(verbose=None,buf=None,max_cols=None,memory_usage=None,show_counts=None,null_counts=None)`参数说明(常用参数):-verbose:布尔值或None。如果为True,则显示每一列的完整信息;如果为False,则只显示摘要(列数、数据类型分布等);默认None,当列数超过max_cols时,相当于False,否则相当于True。-buf:可选的输出缓冲区,默认为sys.stdout(即直接打印到控制台)。如果传入一个可写的缓冲区(如StringIO对象),则输出到该缓冲区。-max_cols:整数,当verbose为None时,如果列数超过max_cols,则使用简洁模式(相当于verbose=False)。默认情况下,pandas会有一个内部阈值(通常为50列)。-memory_usage:指定是否显示内存使用情况。可以是布尔值或字符串。默认为None,如果为True,则显示内存使用情况;如果为字符串'all',则显示详细的内存使用(包括索引);如果为False,则不显示。None的情况下,默认会显示内存使用情况,但不会包括索引部分(除非设置memory_usage='deep'进行精确计算)。-show_counts:布尔值,是否显示非空值数量。默认为None,表示只有在数据框不是很大的时候才显示(避免计算开销)。如果设为True,则强制显示;如果False,则不显示。-null_counts:已弃用,由show_counts代替。注意:在较新的pandas版本中,show_counts参数用于控制是否显示非空值数量。如果数据量很大,计算非空值可能会消耗时间,因此默认情况下,当数据框较大时,show_counts为False。示例:假设我们有一个DataFrame,我们可以这样使用:```pythonimportpandasaspddf=pd.DataFrame({'A':[1,2,None,4],'B':['a','b','c',None],'C':[1.1,2.2,3.3,4.4]})df.info()```输出可能如下:```<class'pandas.core.frame.DataFrame'>RangeIndex:4entries,0to3Datacolumns(total3columns):#ColumnNon-NullCountDtype----------------------------0A3non-nullfloat641B3non-nullobject2C4non-nullfloat64dtypes:float64(2),object(1)memoryusage:224.0+bytes```解释:1.第一行:数据类型(DataFrame)。2.第二行:索引范围(0到3,共4行)。3.表格部分:每一列的非空值数量、数据类型。4.最后一行:数据类型分布和内存使用情况。使用场景:-数据清洗前:快速了解数据的基本结构,包括列数、行数、每列的数据类型以及缺失值情况。-内存优化:通过查看内存使用情况,可以考虑优化数据类型以减少内存占用(例如将float64转换为float32,将object转换为category等)。注意事项:-当数据集非常大时,info()可能会花费一些时间,因为它需要计算非空值数量(如果show_counts为True)和内存使用情况。-如果需要更详细的内存使用情况(包括索引),可以设置`memory_usage='deep'`,但计算会更耗时。我们还可以将输出重定向到文件或字符串:```pythonimportiobuf=io.StringIO()df.info(buf=buf)info_str=buf.getvalue()```相关问题:1.如何使用info()函数检查数据集的缺失值?2.如何通过info()的输出优化内存使用?3.info()函数与describe()函数在数据探索阶段的作用有何不同?4.在大型数据集上使用info()函数时需要注意什么?</think>### Pandas `info()` 函数详解 `info()` 是 Pandas 中用于**快速获取 DataFrame 摘要信息**的核心函数,在数据探索阶段至关重要。以下是详细说明: #### 核心功能 1. **数据结构概览** - 显示 DataFrame 的维度(行数×列数) - 输出索引类型和范围 - 列出所有列名及其数据类型 - 显示非空值计数(识别缺失值) 2. **内存分析** - 计算并显示 DataFrame 的内存占用量 - 支持深度内存分析(`memory_usage='deep'`) 3. **数据类型统计** - 自动汇总各数据类型的列数(如 int64, float64, object 等) #### 基本语法 ```python DataFrame.info( verbose=None, # 是否显示完整列信息 buf=None, # 输出缓冲区(默认sys.stdout) max_cols=None, # 最大显示列数 memory_usage=None, # 内存分析模式 show_counts=None, # 是否显示非空计数 null_counts=None # 别名参数(同show_counts) ) ``` #### 典型应用示例 ```python import pandas as pd # 创建示例DataFrame data = { 'ID': [1, 2, 3, None], 'Name': ['Alice', 'Bob', None, 'David'], 'Salary': [50000.0, None, 75000.0, 60000.0] } df = pd.DataFrame(data) # 使用info()获取摘要 df.info() ``` **输出结果**: ``` <class 'pandas.core.frame.DataFrame'> RangeIndex: 4 entries, 0 to 3 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 ID 3 non-null float64 1 Name 3 non-null object 2 Salary 3 non-null float64 dtypes: float64(2), object(1) memory usage: 224.0+ bytes ``` #### 关键参数解析 | 参数 | 说明 | 常用值 | |------|------|--------| | `verbose` | 控制信息详细度 | `True`(显示所有列细节), `False`(仅摘要) | | `memory_usage` | 内存分析深度 | `'deep'`(精确计算对象内存), `None`(基础估算) | | `show_counts` | 是否显示非空计数 | `True`(强制显示), `False`(强制隐藏) | | `buf` | 重定向输出 | `sys.stdout`(默认), `StringIO`(捕获输出) | #### 实际应用场景 1. **数据质量检查** ```python # 识别缺失值比例高的列 df.info(show_counts=True) ``` 2. **内存优化依据** ```python # 精确分析对象类型内存占用 df.info(memory_usage='deep') ``` 3. **自动化报告生成** ```python from io import StringIO buffer = StringIO() df.info(buf=buffer) report = buffer.getvalue() # 获取字符串格式报告 ``` #### 注意事项 1. **大数据集性能**:当数据集 > 100,000 行时,`memory_usage='deep'` 可能较慢 2. **与`describe()`互补**:`info()` 侧重结构,`describe()` 侧重统计分布[^2] 3. **缺失值显示**:`Non-Null Count` 与总行数的差值即为缺失值数量 > 该函数在数据清洗前可快速识别:列类型错误、高缺失率列、异常内存占用等问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenos121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值