Python常用库分类速查手册
数据科学与分析库
📊 Pandas - 高效数据处理与分析工具
1. 核心功能与应用场景
核心功能:提供高性能、易用的数据结构(Series、DataFrame)和数据分析工具
应用场景:数据清洗、转换、聚合、时间序列分析、表格数据处理
优势:简洁的API、强大的索引功能、灵活的数据操作能力
2. 快速入门
安装与基础结构
bash
pip install pandas numpy # 安装Pandas及依赖
python
import pandas as pd
import numpy as np
# 创建Series(一维数据)
s = pd.Series(
data=[10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'],
name='示例数据'
)
# 创建DataFrame(二维表格数据)
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [25, 32, 28, 45, 36],
'部门': ['技术部', '市场部', '技术部', '财务部', '技术部'],
'工资': [15000, 12000, 18000, 10000, 20000]
})
# 基础查看操作
print("数据预览:\n", df.head(3)) # 查看前3行
print("数据信息:\n", df.info()) # 数据类型和非空值信息
print("统计摘要:\n", df.describe()) # 数值列统计信息
print("部门分布:\n", df['部门'].value_counts()) # 分类值计数
3. 核心功能详解
3.1 数据选择与筛选
实用示例:
python
# 基础选择
names = df['姓名'] # 单列选择
top2 = df.loc[:1, ['姓名', '部门']] # 前2行,指定列
# 条件筛选
high_income = df[df['工资'] > 15000]
tech_department = df[df['部门'].isin(['技术部', '研发部'])]
# 复杂条件
complex_filter = df[
(df['年龄'] > 30) &
(df['工资'] > 12000) &
(df['部门'] != '财务部')
]
# 范围筛选
age_range = df[df['年龄'].between(25, 35)]
# 查询方法(更直观的语法)
result = df.query("""
年龄 > 30 and
工资 > 12000 and
部门 not in ['财务部', '行政部']
""")
3.2 数据清洗与转换
缺失值处理:
python
# 检测缺失值
missing_values = df.isnull().sum()
# 删除缺失值
df_clean = df.dropna(subset=['工资', '部门']) # 指定列
# 填充缺失值
df_filled = df.fillna({
'年龄': df['年龄'].median(), # 中位数填充
'工资': df['工资'].mean() # 均值填充
})
# 替换值
df_replaced = df.replace({
'部门': {'技术部': '研发部', '市场部': '营销部'},
'工资': {0: df['工资'].mean()}
})
数据类型转换:
python
# 查看数据类型
print(df.dtypes)
# 转换数据类型
df['年龄'] = df['年龄'].astype('int32') # 整数类型
df['入职日期'] = pd.to_datetime(df['入职日期']) # 日期类型
df['工资'] = pd.to_numeric(df['工资'], errors='coerce') # 转换为数值,错误值设为NaN
# 分类数据处理
df['部门'] = df['部门'].astype('category') # 转换为分类类型
df['工资等级'] = pd.cut(
df['工资'],
bins=[0, 10000, 20000, np.inf],
labels=['低', '中', '高']
)
3.3 数据分组与聚合
基础分组聚合:
python
# 按部门分组计算平均工资和年龄
dept_stats = df.groupby('部门').agg({
'工资': ['mean', 'max', 'min', 'count'],
'年龄': ['mean', 'median']
})
# 重命名列
dept_stats.columns = ['_'.join(col).strip() for col in dept_stats.columns.values]
# 分组后应用自定义函数
def salary_range(group):
return group.max() - group.min()
dept_stats['工资_range'] = df.groupby('部门')['工资'].apply(salary_range)
高级分组操作:
python
# 分组转换(保留原数据结构)
df['部门平均工资'] = df.groupby('部门')['工资'].transform('mean')
df['工资与部门平均差'] = df['工资'] - df['部门平均工资']
# 多级分组
dept_age_stats = df.groupby(['部门', '工资等级']).agg({
'年龄': 'mean',
'姓名': 'count'
}).reset_index() # 重置索引,将分组键转为列
3.4 数据合并与连接
示例:
python
# 创建示例数据
df1 = df[['姓名', '部门', '工资']]
df2 = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'绩效评分': [4.8, 4.2, 4.5, 3.9],
'是否优秀': [True, False, True, False]
})
# 内连接(只保留匹配的记录)
merged_inner = pd.merge(df1, df2, on='姓名', how='inner')
# 左连接(保留左表所有记录)
merged_left = pd.merge(df1, df2, on='姓名', how='left')
# 处理缺失值
merged_left['绩效评分'] = merged_left['绩效评分'].fillna(merged_left['绩效评分'].mean())
# 行合并
df_concat = pd.concat([df1, df2], axis=1) # 按列拼接
4. 实战案例:员工数据分析
需求:分析员工薪资结构,识别薪资异常值,生成部门薪资报告
python
# 1. 数据加载与初步检查
df = pd.read_excel('员工数据.xlsx')
print(f"数据形状: {df.shape}")
print(f"数据字段: {df.columns.tolist()}")
print(f"缺失值情况:\n{df.isnull().sum()}")
# 2. 数据清洗
df_clean = df.copy()
# 处理缺失值
df_clean['入职日期'] = df_clean['入职日期'].fillna(pd.Timestamp('2023-01-01'))
df_clean['工资'] = df_clean['工资'].fillna(df_clean.groupby('部门')['工资'].transform('median'))
# 数据类型转换
df_clean['入职日期'] = pd.to_datetime(df_clean['入职日期'])
df_clean['部门'] = df_clean['部门'].astype('category')
# 3. 特征工程
df_clean['司龄'] = (pd.Timestamp.now() - df_clean['入职日期']).dt.days // 365
df_clean['薪资等级'] = pd.cut(
df_clean['工资'],
bins=[0, 8000, 15000, 25000, np.inf],
labels=['初级', '中级', '高级', '资深']
)
# 4. 数据分析
## 部门薪资统计
dept_salary = df_clean.groupby('部门').agg({
'工资': ['count', 'mean', 'median', 'min', 'max', 'std']
}).round(2)
dept_salary.columns = ['人数', '平均工资', '中位数工资', '最低工资', '最高工资', '工资标准差']
## 异常值检测(使用IQR方法)
def detect_outliers(group):
q1 = group.quantile(0.25)
q3 = group.quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
return (group < lower_bound) | (group > upper_bound)
df_clean['薪资异常'] = df_clean.groupby('部门')['工资'].transform(detect_outliers)
outliers = df_clean[df_clean['薪资异常']]
print(f"检测到 {len(outliers)} 个薪资异常值")
# 5. 结果导出
with pd.ExcelWriter('员工薪资分析报告.xlsx') as writer:
df_clean.to_excel(writer, sheet_name='清洗后数据', index=False)
dept_salary.reset_index().to_excel(writer, sheet_name='部门薪资统计', index=False)
outliers.to_excel(writer, sheet_name='薪资异常值', index=False)
print("分析完成,结果已导出到Excel文件")
5. 常见问题与解决方案
6. 性能优化技巧
提升Pandas性能的10个实用技巧:
使用适当的数据类型:
python
# 将字符串列转换为分类类型(节省内存) df['部门'] = df['部门'].astype('category') # 使用更小的数值类型 df['年龄'] = pd.to_numeric(df['年龄'], downcast='integer') df['工资'] = pd.to_numeric(df['工资'], downcast='float')使用向量化操作替代循环:
python
# 低效:循环操作 result = [] for idx, row in df.iterrows(): result.append(row['工资'] * 1.2) df['工资_涨薪'] = result # 高效:向量化操作 df['工资_涨薪'] = df['工资'] * 1.2使用
query和eval进行高效计算:python
# 普通方法 df['年薪'] = df['工资'] * 12 + df['年终奖'] # 更高效的方法(尤其对大数据集) df['年薪'] = df.eval("工资 * 12 + 年终奖")使用
inplace参数减少内存占用:python
# 不推荐(创建副本) df = df.drop(columns=['无用列']) # 推荐(原地修改) df.drop(columns=['无用列'], inplace=True)
📈 NumPy - 数值计算基础库
1. 核心功能与应用场景
核心功能:提供高性能多维数组对象和数学函数
应用场景:数值计算、矩阵运算、信号处理、科学计算
优势:C语言实现的核心算法、向量化操作、广播机制
2. 快速入门
python
import numpy as np
# 创建数组
a = np.array([1, 2, 3, 4, 5]) # 一维数组
b = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
# 数组属性
print(f"数组维度: {b.ndim}") # 维度
print(f"数组形状: {b.shape}") # 形状
print(f"数组大小: {b.size}") # 元素数量
print(f"数据类型: {b.dtype}") # 数据类型
# 基本操作
print(f"求和: {b.sum()}") # 总和
print(f"均值: {b.mean()}") # 均值
print(f"最大值: {b.max()}") # 最大值
print(f"按行求和: {b.sum(axis=1)}") # 沿轴操作
# 数组运算
c = b * 2 # 元素乘法
d = b + c # 元素加法
e = np.dot(b, b.T) # 矩阵乘法
🚀 其他核心库速查
🔄 Requests - HTTP请求库
核心功能:发送HTTP请求,处理响应,支持会话管理和认证
python
import requests
# 基本GET请求
response = requests.get(
"https://api.github.com/users/octocat",
headers={"Accept": "application/vnd.github.v3+json"},
timeout=10
)
# 检查响应状态
if response.status_code == 200:
data = response.json()
print(f"用户名: {data['name']}")
print(f"仓库数量: {data['public_repos']}")
# POST请求发送数据
payload = {"title": "新文章", "content": "文章内容"}
response = requests.post(
"https://api.example.com/posts",
json=payload,
auth=("username", "password")
)
# 文件上传
files = {"file": ("报告.pdf", open("报告.pdf", "rb"), "application/pdf")}
response = requests.post("https://httpbin.org/post", files=files)
# 会话管理(保持登录状态)
with requests.Session() as session:
# 登录
session.post("https://example.com/login", data={"user": "名", "pass": "密码"})
# 已登录状态访问
response = session.get("https://example.com/个人中心")
📂 Pathlib - 文件系统路径处理
核心功能:面向对象的文件系统路径操作,替代传统的os.path模块
python
from pathlib import Path
# 创建路径对象
data_dir = Path("data")
file_path = data_dir / "results.csv" # 路径拼接
# 路径属性
print(f"文件名: {file_path.name}") # "results.csv"
print(f"扩展名: {file_path.suffix}") # ".csv"
print(f"父目录: {file_path.parent}") # "data"
print(f"绝对路径: {file_path.absolute()}")
# 文件操作
if not data_dir.exists():
data_dir.mkdir(parents=True, exist_ok=True) # 创建目录
# 写入文件
file_path.write_text("姓名,年龄\n张三,30\n李四,25")
# 读取文件
content = file_path.read_text(encoding="utf-8")
# 查找文件
csv_files = list(data_dir.glob("**/*.csv")) # 递归查找所有CSV文件
# 文件重命名
new_path = file_path.with_name("new_results.csv")
file_path.rename(new_path)
🔧 常用工具函数库
1. 数据处理
2. Web开发
3. 系统工具
4. 数据可视化
📚 扩展学习资源
官方文档
推荐书籍
《Python for Data Analysis》by Wes McKinney (Pandas创始人)
《Python Data Science Handbook》by Jake VanderPlas
《Fluent Python》by Luciano Ramalho
在线教程
性能优化
🛠️ 实用工具与资源
1. 环境管理
虚拟环境:
python -m venv .venv依赖管理:
pip freeze > requirements.txt环境复制:
pip install -r requirements.txt
2. 代码调试与优化
调试工具:
pdb.set_trace()或 IDE断点调试性能分析:
cProfile.run('函数名()')内存分析:
memory_profiler库
3. 常用快捷命令
bash
# 安装库
pip install pandas numpy requests
# 升级库
pip install --upgrade pandas
# 导出环境
pip freeze > requirements.txt
# 安装项目依赖
pip install -r requirements.txt
# 检查库冲突
pip check
graph TD A[数据加载] --> B[数据清洗] B --> C[数据转换] C --> D[数据分析] D --> E[结果可视化] E --> F[报告导出] subgraph 核心库 B --> Pandas清洗[Pandas] C --> Pandas转换[Pandas/NumPy] D --> Pandas分析[Pandas] E --> Matplotlib[Matplotlib/Seaborn] F --> ExcelWriter[Pandas] end style A fill:#f9f,stroke:#333 style B fill:#bbf,stroke:#333 style C fill:#bfb,stroke:#333 style D fill:#fbb,stroke:#333 style E fill:#fbf,stroke:#333 style F fill:#bff,stroke:#333