← 返回 Day 102 正文

Day 102 · 图解

Day 102 — Pandas 核心:图解

1. Series 与 DataFrame 结构

Series(一维):
┌─────────────────────────────┐
│  index  │     values        │
├─────────┼───────────────────┤
│    0    │       10          │
│    1    │       20          │
│    2    │       30          │
│    3    │       40          │
└─────────┴───────────────────┘

DataFrame(二维):
┌─────────┬───────┬────────┬──────┐
│  index  │  姓名  │  年龄   │ 城市 │
├─────────┼───────┼────────┼──────┤
│    0    │  张三  │   25   │ 北京 │
│    1    │  李四  │   30   │ 上海 │
│    2    │  王五  │   35   │ 广州 │
└─────────┴───────┴────────┴──────┘
          columns(列标签)

2. loc vs iloc 选择对比

DataFrame:
┌────┬────────┬───────┬────────┐
│    │  姓名   │  年龄  │  薪资  │
├────┼────────┼───────┼────────┤
│ 0  │  张三   │  25   │ 15000 │ ← loc['张三'] 或 iloc[0]
│ 1  │  李四   │  30   │ 25000 │ ← loc['李四'] 或 iloc[1]
│ 2  │  王五   │  35   │ 18000 │ ← loc['王五'] 或 iloc[2]
└────┴────────┴───────┴────────┘
       ↑              ↑
   loc['姓名']    loc['年龄']
   iloc[:, 0]     iloc[:, 1]

loc:
  df.loc[0, '姓名']     → '张三'
  df.loc[0:1, '姓名']   → 第0行到第1行的姓名(包含两端!)

iloc:
  df.iloc[0, 0]          → '张三'
  df.iloc[0:2, 0]        → 第0行到第1行的姓名(不包含结束!)

3. 布尔索引工作流程

原始 DataFrame:
┌────┬────────┬───────┐
│    │  产品   │  价格  │
├────┼────────┼───────┤
│ 0  │  手机   │ 4999  │
│ 1  │  电脑   │ 6999  │
│ 2  │  耳机   │  999  │
│ 3  │  平板   │ 3999  │
└────┴────────┴───────┘

步骤 1: 创建布尔掩码
mask = df['价格'] > 3000
┌────┬───────┐
│ 0  │ True  │   4999 > 3000 ✓
│ 1  │ True  │   6999 > 3000 ✓
│ 2  │ False │    999 > 3000 ✗
│ 3  │ True  │   3999 > 3000 ✓
└────┴───────┘

步骤 2: 用掩码筛选
df[mask]
┌────┬────────┬───────┐
│ 0  │  手机   │ 4999  │  ← True
│ 1  │  电脑   │ 6999  │  ← True
│ 3  │  平板   │ 3999  │  ← True
└────┴────────┴───────┘

多条件(注意括号优先级):
mask = (df['价格'] > 3000) & (df['产品'] != '电脑')
       ├──── 条件1 ────┤   ├──── 条件2 ────┤

4. 数据探索流程图

┌──────────────┐
│  1. 加载数据  │  pd.read_csv() / read_excel()
└──────┬───────┘
       ↓
┌──────────────┐
│  2. 快速概览  │  shape, head(), info(), describe()
└──────┬───────┘
       ↓
┌──────────────┐
│  3. 数据清洗  │  缺失值, 重复值, 类型转换
└──────┬───────┘
       ↓
┌──────────────┐
│  4. 数据分析  │  groupby, 聚合, 分组统计
└──────┬───────┘
       ↓
┌──────────────┐
│  5. 结果导出  │  to_csv(), to_excel()
└──────────────┘

5. 文件读写格式对比

┌──────────────┬──────────┬──────────┬─────────────┐
│    格式      │  速度    │  文件大小 │  适用场景    │
├──────────────┼──────────┼──────────┼─────────────┤
│ CSV          │  慢      │  大      │  通用交换    │
│ Excel        │  慢      │  中      │  商业报告    │
│ Parquet      │  快      │  小      │  大数据      │
│ JSON         │  中      │  中      │  API数据     │
│ HDF5         │  快      │  小      │  科学计算    │
│ SQL          │  中      │  N/A     │  数据库交互  │
└──────────────┴──────────┴──────────┴─────────────┘

CSV vs Parquet 文件大小对比(100万行×10列):
CSV:    ~80 MB
Parquet: ~15 MB  (压缩后小 5 倍!)