数据分析:Pandas自定义describe方法,一行代码查看数据集各列的描述

博客介绍了Pandas的describe方法,它能查看各列计数、均值、最大最小值等。还介绍了一种可按需添加各特征其他描述的方法,通过转置和添加列,实现展示各列多种统计值,并增加了缺失率的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pandas提供describe方法,可以查看各列的计数、均值、最大最小值等,功能强大。下面介绍一种可根据自身要求,添加各个特征的其他描述的方法。

df.describe().T.assign(missing_rate = df.apply(lambda x : (len(x)-x.count())/float(len(x))))

T为转置,assign为添加的列。 

上述代码实现了,展示各列的计数、均值、最大最小值、标准差和第一、二、三个四分位值,同时增加了缺失率的计算。

 

 countmeanstdmin25%50%75%max
SeriousDlqin2yrs150000.00.0668400.2497460.00.0000000.0000000.0000001.00.000000
RevolvingUtilizationOfUnsecuredLines150000.06.048438249.7553710.00.0298670.1541810.55904650708.00.000000
age150000.052.29520714.7718660.041.00000052.00000063.000000109.00.000000
NumberOfTime30-59DaysPastDueNotWorse150000.00.4210334.1927810.00.0000000.0000000.00000098.00.000000
DebtRatio150000.0353.0050762037.8185230.00.1750740.3665080.868254329664.00.000000
MonthlyIncome120269.06670.22123714384.6742150.03400.0000005400.0000008249.0000003008750.00.198207
NumberOfOpenCreditLinesAndLoans150000.08.4527605.1459510.05.0000008.00000011.00000058.00.000000
NumberOfTimes90DaysLate150000.00.2659734.1693040.00.0000000.0000000.00000098.00.000000
NumberRealEstateLoansOrLines150000.01.0182401.1297710.00.0000001.0000002.00000054.00.000000
NumberOfTime60-89DaysPastDueNotWorse150000.00.2403874.1551790.00.0000000.0000000.00000098.00.000000
NumberOfDependents146076.00.7572221.1150860.00.0000000.0000001.00000020.00.026160

最后一列为自定义的缺失率(复制的列名没显示出来)

<think>嗯,用户想知道怎么用Pandas和NumPy做数据清洗和统计计算。首先我得回忆一下这两个库的基本功能。Pandas主要是处理结构化数据的,比如表格数据,而NumPy擅长数值计算,尤其是数组操作。根据引用[2]和[3],它们经常一起使用,Pandas依赖NumPy的高性能运算。 数据清洗通常包括处理缺失值、重复数据、异常值,还有数据转换。比如,Pandas的dropna()可以处理缺失值,fillna()填充。重复数据用drop_duplicates()。异常值可能需要用条件筛选或者统计方法识别,比如Z-score,这可能需要NumPy计算标准差和均值。 统计计算部分,用户可能想知道基本的统计量如均值、总和,或者更复杂的如分组聚合。Pandasdescribe()函数能给出摘要统计,而groupby()进行分组。NumPy的mean(), std()这些函数可以在数组上快速计算。引用[4]提到iloc用于数据提取,可能在清洗时选择特定行有用。 还要注意数据导入,像引用[1]提到的,Pandas可以读CSV、Excel等,数据导入后才能清洗和处理。可能需要提到读取数据后如何用NumPy进行转换,比如将DataFrame转为NumPy数组进行运算。 可能需要分步骤讲解,先数据导入,再清洗步骤,然后统计计算。例子的话,比如处理缺失值,替换为均值,用NumPy计算均值,再用Pandas填充。或者标准化数据,用NumPy计算Z-score,然后用Pandas过滤异常值。 用户可能还不太清楚如何结合两者,比如什么时候用Pandas的函数,什么时候用NumPy。比如,Pandas更适合表格操作,而NumPy适合数值运算。比如,处理缺失值时用Pandas,计算统计量时可以用Pandas或NumPy,但NumPy可能更快,尤其是大数据集。 还要注意代码示例的正确性,比如使用$...$格式的行内公式,独立公式用$$...$$。比如,在标准化时,公式是$$z = \frac{x - \mu}{\sigma}$$,需要正确排版。同时引用相关引用,比如提到数据导入时引用[1],数据处理时引用[2]和[3]。 可能的问题包括如何选择处理缺失值的方法,如何优化性能,或者如何处理非数值数据。但用户的问题主要聚焦在清洗和统计,所以需要集中在这些方面。最后生成的相关问题要围绕这些主题,比如数据预处理步骤、性能优化、实际案例应用等。 总结步骤应该是:数据导入→清洗(缺失、重复、异常)→统计计算(基本统计量、聚合、高级分析)。每个步骤结合Pandas和NumPy的方法,给出示例代码,并引用相关引用支持。</think>### 使用Pandas和NumPy实现数据清洗与统计计算的步骤 #### 一、数据导入与初步检查 1. **数据导入** 使用Pandas读取外部数据,支持CSV、Excel、SQL等格式: ```python import pandas as pd import numpy as np # 读取CSV文件 df = pd.read_csv('data.csv') ``` 引用[1]提到Pandas的数据导入功能是数据处理的第一步[^1]。 2. **数据预览与基本信息** ```python df.head() # 查看前5行 df.info() # 数据类型和缺失值检查 df.describe() # 数值型变量的统计摘要(均值、标准差等) ``` --- #### 二、数据清洗核心操作 1. **处理缺失值** - **删除缺失值**: ```python df.dropna(axis=0) # 删除包含缺失值的行 ``` - **填充缺失值**: ```python df.fillna(df.mean()) # 用均值填充数值型缺失值 df['category_column'].fillna('Unknown', inplace=True) # 分类填充固定值 ``` - **结合NumPy的条件筛选**: ```python mask = np.isnan(df['column']) # 使用NumPy检测缺失值 df.loc[~mask, 'column'] # 过滤非缺失值 ``` 2. **处理重复值** ```python df.drop_duplicates() # 删除完全重复的行 ``` 3. **处理异常值** - **基于标准差(Z-score)**: $$ z = \frac{x - \mu}{\sigma} $$ 使用NumPy计算Z-score并过滤: ```python z_scores = np.abs((df['column'] - df['column'].mean()) / df['column'].std()) df = df[z_scores < 3] # 移除Z-score绝对值大于3的异常值 ``` - **分位数法**: ```python q_low = df['column'].quantile(0.01) q_high = df['column'].quantile(0.99) df = df[(df['column'] > q_low) & (df['column'] < q_high)] ``` 4. **数据格式转换** ```python df['date_column'] = pd.to_datetime(df['date_column']) # 转换为日期格式 df['category_column'] = df['category_column'].astype('category') # 转换为分类类型 ``` --- #### 三、统计计算与高级分析 1. **基础统计量** - **Pandas内置函数**: ```python df.mean() # 均值 df.median() # 中位数 df.std() # 标准差 ``` - **NumPy函数增强计算**: ```python np.percentile(df['column'], [25, 75]) # 计算四分位数 ``` 2. **分组聚合** ```python grouped = df.groupby('category_column') grouped['numeric_column'].agg([np.mean, np.sum]) # 按分组计算均值与总和 ``` 3. **相关性与协方差** ```python df.corr() # 计算间相关系数矩阵 np.cov(df['column1'], df['column2']) # 使用NumPy计算协方差 ``` 4. **自定义统计函数** ```python def custom_range(x): return x.max() - x.min() df['column'].agg(custom_range) # 应用自定义函数 ``` --- #### 四、完整示例:数据清洗与统计流程 ```python # 数据导入 df = pd.read_csv('sales_data.csv') # 清洗:处理缺失值与异常值 df.fillna({'price': df['price'].median()}, inplace=True) z_scores = np.abs((df['sales'] - df['sales'].mean()) / df['sales'].std()) df = df[z_scores < 3] # 统计计算:按地区分组统计销售额均值 result = df.groupby('region')['sales'].mean() print(result) ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值