🐼 Pandas 全能速查表 (Cheat Sheet)
1. 核心数据结构与 I/O (Setup & IO)
一切的开始。
python
import pandas as pd
import numpy as np
# --- 创建对象 ---
df = pd.DataFrame(data) # 从字典或Numpy数组创建
s = pd.Series(data) # 创建序列
# --- 数据读取 (Input) ---
df = pd.read_csv('file.csv') # 读取CSV
df = pd.read_excel('file.xlsx') # 读取Excel
df = pd.read_sql(query, conn) # 从数据库读取
df = pd.read_parquet('file.parquet') # 读取Parquet (大数据常用)
df = pd.read_clipboard() # 从剪贴板读取 (调试神技)
# --- 数据保存 (Output) ---
df.to_csv('file.csv', index=False) # 保存为CSV (通常不保存索引)
df.to_excel('file.xlsx') # 保存为Excel
2. 数据概览与检查 (Inspection)
拿到数据的第一步,先看它的"长相"和"体质"。
python
# --- 宏观概览 ---
df.head(5) # 查看前5行
df.tail(5) # 查看后5行
df.shape # 查看行数和列数 (rows, columns)
df.info() # 查看索引、数据类型和内存信息 (关键!)
df.describe() # 查看数值列的统计信息 (均值、标准差、四分位等)
# --- 微观检查 ---
df.columns # 查看所有列名
df.index # 查看索引
df.dtypes # 查看各列数据类型
df['col'].unique() # 查看某列的唯一值
df['col'].nunique() # 查看某列唯一值的数量
df['col'].value_counts() # 查看某列各类别的出现频次 (高频使用)
3. 数据选择与过滤 (Selection & Filtering)
Pandas 推荐使用 .loc 和 .iloc 进行精确索引。
python
# --- 基于标签 (Label) 的选择 .loc ---
df.loc[row_label, 'col_name'] # 选取特定行和列的一个值
df.loc[:, ['col1', 'col2']] # 选取所有行的特定列
df.loc[df['age'] > 18] # 筛选满足条件的行
# --- 基于位置 (Position) 的选择 .iloc ---
df.iloc[0] # 第一行
df.iloc[:, 0:3] # 前三列
df.iloc[0, 1] # 第0行第1列的元素
# --- 条件过滤 (Boolean Indexing) ---
mask = (df['age'] > 18) & (df['city'] == 'Beijing') # 复合条件
df[mask]
df.query('age > 18 and city == "Beijing"') # SQL风格查询 (代码更易读)
4. 数据清洗 (Data Cleaning)
这是最耗时的部分。
python
# --- 处理缺失值 ---
df.isnull().sum() # 检查每列有多少缺失值
df.dropna() # 删除包含缺失值的行
df.dropna(subset=['col']) # 删除特定列有缺失的行
df.fillna(0) # 用0填充缺失值
df.fillna(method='ffill') # 向前填充 (时间序列常用)
# --- 处理重复值 ---
df.duplicated().sum() # 检查重复行数
df.drop_duplicates() # 删除重复行
df.drop_duplicates(subset=['id']) # 基于特定列去重
# --- 数据类型转换 ---
df['price'] = df['price'].astype(float) # 转换类型
df['date'] = pd.to_datetime(df['date']) # 转换为时间类型
# --- 重命名与替换 ---
df.rename(columns={'old_name': 'new_name'}, inplace=True) # 重命名列
df['col'].replace(1, 'One', inplace=True) # 替换值
5. 数据处理与变换 (Manipulation)
对数据进行"整形"和计算。
python
# --- 列操作 ---
df['new_col'] = df['col1'] * 2 # 创建新列
df.drop('col', axis=1, inplace=True) # 删除列
# --- 排序 ---
df.sort_values(by='col', ascending=False) # 按某列降序排列
df.sort_index() # 按索引排序
# --- 应用函数 ---
df['col'].apply(lambda x: x*2) # 对列中每个元素应用函数 (慢,通用)
df['col'].map({'A': 1, 'B': 2}) # 字典映射 (用于Series)
# --- 字符串处理 (.str accessor) ---
df['name'].str.lower() # 转小写
df['name'].str.contains('Mr') # 包含查找
df['name'].str.split(',') # 字符串分割
6. 分组与聚合 (Grouping & Aggregation)
数据分析的核心,类似 SQL 的 GROUP BY。
python
# --- 基本分组 ---
g = df.groupby('category') # 创建分组对象
g['value'].mean() # 计算每组的均值
g.size() # 每组的大小
# --- 强大的 agg ---
df.groupby('category').agg({
'value': ['mean', 'max', 'sum'], # 对value列做多个聚合
'id': 'count' # 对id列做计数
})
# --- 透视表 (Pivot Table) ---
pd.pivot_table(df, values='sales', index='date', columns='city', aggfunc='sum')
7. 数据合并 (Merging & Joining)
将多个表拼在一起。
python
# --- Merge (类似 SQL JOIN) ---
# how: 'left', 'right', 'inner', 'outer'
pd.merge(df1, df2, on='key_col', how='inner')
# --- Concat (物理拼接) ---
pd.concat([df1, df2], axis=0) # 上下拼接 (增加行)
pd.concat([df1, df2], axis=1) # 左右拼接 (增加列)
8. 时间序列专门处理 (Time Series)
Pandas 的看家本领,金融与日志分析必备。
python
# --- 时间属性提取 (.dt accessor) ---
df['date'].dt.year # 提取年份
df['date'].dt.month # 提取月份
df['date'].dt.day_name() # 提取星期几
# --- 重采样 (Resampling) ---
# 假设索引是DatetimeIndex
df.resample('M').mean() # 按月重采样并计算均值
df.resample('15min').sum() # 按15分钟聚合