前言
在日常数据分析、报表开发、机器学习预处理场景中,Pandas 是 Python 最核心工具。很多初学者零散学习各种 API,缺少一套标准化分析流程。本文结合 Pandas 架构思维导图,带你落地一套通用数据分析流水线:导入库 → 加载数据 → 数据清洗 → 特征构造 → 数据分析,可直接套用在业务数据集上。
上图清晰展示 Pandas 整体体系: 数据源(CSV/JSON/SQL)载入 Pandas; 两大核心结构:Series(一维)、DataFrame(二维表格); 四大核心能力:数据清洗、统计分析、可视化、机器学习预处理。下面我们完整实操整套流程。
1.导入必要的库
python
import pandas as pd
import numpy as np
2.导入数据
Pandas 支持多种数据源:csv、excel、json、数据库 SQL 等,日常最常用read_csv。
python
df = pd.read_csv('data/penguins.csv')
df.head(5)
# 查看基础信息
print("数据集前5行:")
print(df.head())
print("数据集基本信息:")
print(df.info())
print("数值字段描述性统计:")
print(df.describe())
3.数据清洗(数据分析重中之重)
原始数据经常存在缺失值、重复行、异常值,清洗保证分析结果可靠。
python
print("默认统计每列缺失值:\n",df.isna().sum())
#删除存在缺失的行
df.dropna(inplace=True)
4.数据特征的构造(衍生新字段)
基于原始字段计算、生成新特征,丰富分析维度。
python
df['sex'] = df['sex'].astype('category')
df['bill_ratio'] = (df['bill_length_mm'] / df['bill_depth_mm']).round(2)
5.数据分析(分组统计、多维指标挖掘)
使用groupby分组聚合进行多维度业务统计,也是工作最高频场景。
python
#数据分箱-把体重分为三个等级
df['mass_level'] = pd.cut(df['body_mass_g'],bins=3,labels=['低','中','高'])
print(df['mass_level'].value_counts())
#按岛屿分组分析
df.groupby(['island']).agg({
'body_mass_g':['mean','count']
})
#按性别分组分析
df.groupby(['sex']).agg({
'body_mass_g':['mean','count']
})
#按岛屿、性别分组分析
df.groupby(['island','sex']).agg({
'body_mass_g':['mean','count']
})
整套流程总结
- 导入库:搭建 Python 数据分析环境;
- 导入数据:读取文件 / 数据库,初步探查数据概况;
- 数据清洗:处理缺失、重复、异常脏数据;
- 特征构造:衍生业务所需新字段;
- 数据分析:分组、聚合、多维统计,挖掘业务结论。
完整可运行整合代码
python
#企鹅数据分析
#1.导入必要的库
import pandas as pd
import numpy as np
#2.导入数据
df = pd.read_csv('data/penguins.csv')
df.head(5)
#3.数据清洗
#缺失值的检查
print("默认统计每列缺失值:\n",df.isna().sum())
df.dropna(inplace=True)
#4.数据特征的构造
df.info()
df.head(5)
df['sex'] = df['sex'].astype('category')
df['bill_ratio'] = (df['bill_length_mm'] / df['bill_depth_mm']).round(2)
#5.数据分析
#数据分箱-把体重分为三个等级
df['mass_level'] = pd.cut(df['body_mass_g'],bins=3,labels=['低','中','高'])
print(df['mass_level'].value_counts())
#按岛屿分组分析
df.groupby(['island']).agg({
'body_mass_g':['mean','count']
})
#按性别分组分析
df.groupby(['sex']).agg({
'body_mass_g':['mean','count']
})
#按岛屿、性别分组分析
df.groupby(['island','sex']).agg({
'body_mass_g':['mean','count']
})