作为一名使用Python多年的开发者,我深知在实际工作中快速查阅核心API的重要性。这份手册是我在长期项目开发中积累的精华内容,涵盖了Python生态中最常用的8个核心库。不同于官方文档的全面性,这里只收录了实际开发中最常用的20%功能,却能解决80%的问题。
手册采用"代码片段+简短注释"的形式,每个示例都经过实际项目验证。比如NumPy的np.where(arr > 5, 1, 0)这个用法,在我处理数据清洗时几乎每周都会用到。这种条件替换操作如果每次都查文档,会严重拖慢开发效率。
提示:建议将本文加入浏览器书签,开发时按Ctrl+F搜索关键词快速定位。我个人的习惯是为每个库创建单独的代码片段文件,需要时直接复制粘贴。
NumPy的核心优势在于其高性能的ndarray对象。以下是实际项目中最常用的创建方式:
python复制import numpy as np
# 从列表创建(90%的初始化场景)
arr = np.array([1, 2, 3])
# 生成序列(比range更灵活)
seq_arr = np.arange(0, 10, 0.5) # 支持浮点步长
# 特殊矩阵初始化
zeros = np.zeros((3, 4)) # 图像处理常用
ones = np.ones((2, 2)) # 神经网络权重初始化
数组属性检查是调试时的必备技能:
python复制print(arr.shape) # 维度大小 (3,)
print(arr.dtype) # 数据类型 int64
print(arr.ndim) # 维度数量 1
广播机制是NumPy最强大的特性之一:
python复制# 元素级运算(自动广播)
arr + 10 # 每个元素加10
arr * 2 # 每个元素乘2
arr > 5 # 布尔数组生成
# 聚合统计(数据分析基础)
np.sum(arr) # 总和
np.mean(arr) # 平均值
np.std(arr) # 标准差
np.percentile(arr, 90) # 90分位数
多维数组操作要特别注意axis参数:
python复制matrix = np.random.rand(3, 4)
np.sum(matrix, axis=0) # 沿列求和 → 形状(4,)
np.sum(matrix, axis=1) # 沿行求和 → 形状(3,)
布尔索引是数据清洗的利器:
python复制# 条件筛选
arr[arr > 5] = 0 # 大于5的元素置零
mask = (arr > 2) & (arr < 8) # 组合条件
filtered = arr[mask]
# 位置索引
arr[[0, 2, 4]] # 选取特定位置元素
where函数实现条件逻辑:
python复制# 类似Excel的IF函数
result = np.where(arr > 5, arr*2, arr/2)
# 大于5的元素乘2,其余除2
实际项目中90%的数据源都是CSV或Excel:
python复制import pandas as pd
# 读取时指定常用参数
df = pd.read_csv('data.csv',
encoding='utf-8',
parse_dates=['date_col'], # 自动解析日期
na_values=['NA', 'NULL']) # 自定义缺失值
# 保存时禁用索引(避免多余列)
df.to_excel('output.xlsx', index=False)
快速了解数据特征的技巧:
python复制df.head(3) # 查看前3行
df.describe() # 数值列统计摘要
df.info() # 内存用量和类型信息
df['col'].value_counts() # 类别分布
处理缺失值的几种实用方案:
python复制# 删除缺失行(谨慎使用)
df.dropna(subset=['important_col'])
# 填充策略
df.fillna({'col1': 0, 'col2': 'unknown'}) # 列定制
df['col'].fillna(df['col'].mean(), inplace=True) # 均值填充
# 插值法处理时间序列
df['value'].interpolate(method='time')
类型转换的常见场景:
python复制# 字符串处理
df['text'] = df['text'].str.upper()
df['code'] = df['code'].astype('category') # 节省内存
# 日期转换
df['date'] = pd.to_datetime(df['timestamp'], unit='s')
df['year'] = df['date'].dt.year # 提取年份
loc和iloc的区别是面试常考点:
python复制# 标签索引
df.loc[df['score'] > 90, ['name', 'class']]
# 位置索引
df.iloc[10:20, [0, 2, 4]] # 第10-20行,指定列
# 条件组合
df[(df.department == 'IT') & (df.salary > 8000)]
分组聚合的进阶用法:
python复制# 多级分组
grouped = df.groupby(['dept', 'gender'])
# 多种聚合函数
result = grouped.agg({
'salary': ['mean', 'max', 'count'],
'age': 'median'
})
# 分组后过滤
df.groupby('team').filter(lambda x: x['score'].mean() > 75)
标准绘图模板(适用于90%场景):
python复制import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6)) # 单位英寸
plt.plot(x, y,
label='趋势线',
color='#1f77b4', # 标准蓝色
linestyle='--',
linewidth=2)
plt.title('2023销售趋势', fontsize=14)
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售额(万)', fontsize=12)
plt.xticks(rotation=45) # x轴标签旋转
plt.legend(loc='upper right')
plt.grid(alpha=0.3) # 半透明网格
plt.tight_layout() # 自动调整间距
plt.savefig('plot.png', dpi=300) # 高清输出
plt.show()
折线图优化技巧:
python复制# 双Y轴案例
fig, ax1 = plt.subplots()
ax1.plot(x, y1, 'g-')
ax1.set_ylabel('温度(℃)')
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b--')
ax2.set_ylabel('湿度(%)')
直方图与核密度估计:
python复制plt.hist(data, bins=30,
density=True, # 归一化
alpha=0.5,
label='分布')
data.plot(kind='kde',
color='red',
label='密度曲线')
机器学习三板斧模板:
python复制from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
# 数据划分(stratify保持类别比例)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y)
# 模型训练
model = RandomForestClassifier(
n_estimators=100,
max_depth=5,
class_weight='balanced')
model.fit(X_train, y_train)
# 评估
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
数值特征标准化:
python复制from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # 注意用相同scaler
类别特征编码:
python复制from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(handle_unknown='ignore')
X_train_encoded = encoder.fit_transform(X_train_cat)
X_test_encoded = encoder.transform(X_test_cat)
最小化Flask应用模板:
python复制from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/search', methods=['GET'])
def search():
query = request.args.get('q', '')
page = int(request.args.get('page', 1))
# 处理逻辑
results = db_search(query, page)
return jsonify({
'success': True,
'data': results,
'page': page
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Jinja2模板使用示例:
html复制<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>Hello, {{ user.name }}!</h1>
<ul>
{% for item in items %}
<li>{{ loop.index }}. {{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
带异常处理的请求模板:
python复制import requests
from requests.exceptions import RequestException
try:
response = requests.get(
'https://api.example.com/data',
params={'key': 'value'},
headers={'Authorization': 'Bearer xxx'},
timeout=5
)
response.raise_for_status() # 自动检查4xx/5xx
data = response.json()
except RequestException as e:
print(f"请求失败: {e}")
data = None
使用Session提升性能:
python复制with requests.Session() as s:
s.headers.update({'User-Agent': 'MyApp/1.0'})
# 复用TCP连接
resp1 = s.get('https://api.example.com/items')
resp2 = s.post('https://api.example.com/orders', json=payload)
自定义模型类模板:
python复制import torch
import torch.nn as nn
import torch.optim as optim
class MyModel(nn.Module):
def __init__(self, input_size, hidden_size):
super().__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, 1)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
return self.fc2(x)
model = MyModel(10, 32)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
带验证集的训练流程:
python复制for epoch in range(100):
model.train()
for batch in train_loader:
optimizer.zero_grad()
outputs = model(batch['features'])
loss = criterion(outputs, batch['labels'])
loss.backward()
optimizer.step()
# 验证阶段
model.eval()
with torch.no_grad():
val_loss = 0
for batch in val_loader:
outputs = model(batch['features'])
val_loss += criterion(outputs, batch['labels'])
print(f'Epoch {epoch}: Train Loss {loss.item():.4f}, Val Loss {val_loss:.4f}')
这份手册中的每个代码片段都来自我的实际项目经验。建议读者不要试图一次性掌握所有内容,而是根据当前项目需求,重点查阅相关库的章节。随着使用频率的增加,这些API会逐渐变成你的第二本能。