Pandas 速查笔记

一、环境约定

python 复制代码
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None)   # 控制台看全列
pd.set_option('display.width', 180)

二、核心数据结构

对象 维度 轴标签 典型用途 创建示例
Series 1D index 单列/向量 s = pd.Series([1,3,5], index=['a','b','c'])
DataFrame 2D index+columns 整张表 df = pd.DataFrame({'x':[1,2],'y':[3,4]})
Index - - 行/列标签 pd.Index(...)

三、IO 一行代码

python 复制代码
df = pd.read_csv('file.csv', encoding='utf-8-sig', parse_dates=['date'])
df.to_parquet('out.parquet', index=False)   # 极速读写
# 其余:read_excel / read_sql / read_json / read_html / read_pickle ...

四、快速观察

python 复制代码
df.head(3) / df.tail(3)
df.info()          # 列类型、非空计数
df.describe(include='all').T
df.shape, df.columns, df.index
df.dtypes.value_counts()

五、列(Series)常用操作

python 复制代码
s = df['col']
s.unique(), s.nunique(), s.value_counts(dropna=False)
s.isna().sum(), s.fillna(0), s.dropna()
s.astype('category'), pd.to_numeric(s, errors='coerce')
s.str.contains('abc', case=False, na=False)
s.dt.year / s.dt.day_name()          # 日期列
s.map(dict_map), s.replace({'old': 'new'})
s.clip(lower=0, upper=99)
s.rank(method='dense', ascending=False)

六、行/列 选取(核心 8 招)

  1. 列名列表:df[['A','C']]
  2. 切片行:df[10:20]
  3. 布尔索引:df[df['age']>=18]
  4. loc 标签:df.loc[行标签, 列标签]
  5. iloc 位置:df.iloc[行号, 列号]
  6. query 语法:df.query('age>=18 & city=="BJ"')
  7. isin:df[df['city'].isin(['BJ','SH'])]
  8. where/mask:
python 复制代码
df['new'] = df['old'].where(df['old']>0, 0)   # 小于 0 的变 0

七、增删改列

python 复制代码
df['z'] = df['x']+df['y']
df.assign(z=lambda d:d.x+d.y,  # 链式写法
          z2=d.x*2)
df.drop(columns=['tmp'], inplace=True)
df.rename(columns={'old':'new'}, inplace=True)

八、缺失值处理套路

python 复制代码
df.isna().mean().sort_values(ascending=False)   # 看缺失率
df.dropna(thresh=df.shape[1]*0.5, inplace=True) # 缺失过半的行整行删
df['age'].fillna(df['age'].median(), inplace=True)
df.fillna(method='ffill').fillna(method='bfill')  # 前后向填充

九、重复与异常

python 复制代码
df.duplicated(subset=['id']).sum()
df.drop_duplicates(subset=['id'], keep='last', inplace=True)
df[(np.abs(stats.zscore(df['amount'])) > 3)]   # 3σ 异常

十、分组聚合(split-apply-combine)

python 复制代码
agg_d = {'salary':'mean', 'age':['max','min']}
df.groupby('dept').agg(agg_d).round(2)
# 多索引列变平:
df_g.columns = ['_'.join(col).strip() for col in df_g.columns.values]
# transform 保持原形状:
df['avg_dept_salary'] = df.groupby('dept')['salary'].transform('mean')

十一、长宽表互转

python 复制代码
# 长→宽
df_p = df.pivot_table(index='date', columns='code', values='close')
# 宽→长
df_m = df_p.reset_index().melt(id_vars='date', var_name='code', value_name='close')

十二、连接/合并

python 复制代码
pd.concat([df1, df2], axis=0, ignore_index=True)  # 行堆
pd.merge(df_order, df_user, on='uid', how='left', indicator=True)
df.join(df2.set_index('id'), on='id')               # 按索引

十三、时间序列

python 复制代码
pd.date_range('2020-01-01', periods=100, freq='B')  # 工作日
df.set_index('date', inplace=True)
df.asfreq('M', method='ffill')
df.shift(1), df.diff(), df.rolling(7).mean()
df.resample('W').agg({'close':'last','volume':'sum'})

十四、加速技巧

  1. 矢量化:杜绝 for,优先 numpy/pandas 内置
  2. 分类型:
python 复制代码
df['cat'] = df['cat'].astype('category')  # 省内存 & 提速 groupby
  1. eval/query:
python 复制代码
df.eval('profit = revenue - cost', inplace=True)
  1. 并行:
python 复制代码
from pandarallel import pandarallel; pandarallel.initialize()
df['new'] = df.col.parallel_apply(func)
  1. 大文件分块:
python 复制代码
for chunk in pd.read_csv('big.csv', chunksize=100_000):
    process(chunk)

十五、实战小抄

  1. 生成测试数据:
python 复制代码
df = pd.util.testing.makeDataFrame().reset_index(drop=True)
  1. 列名批量清洗:
python 复制代码
df.columns = df.columns.str.strip().str.lower().str.replace(' ','_')
  1. 按组 Top-N:
python 复制代码
df_top = (df.sort_values(['dept','score'], ascending=[True,False])
            .groupby('dept').head(3))
  1. 拆分一列多值:
python 复制代码
df['tags'].str.split(',', expand=True).stack()
  1. 快速画趋势:
python 复制代码
df.set_index('date')['value'].plot(figsize=(10,4))

十六、常见报错速解

报错信息 快速定位
SettingWithCopyWarning 链式赋值 → 先 df = df.copy() 或一步到位
PerformanceWarning: indexing past lexsort depth 多级索引先 df.sort_index()
Cannot compare types 'ndarray(dtype=object)' 列混类型 → astype 统一

十七、记忆口诀(一图流)

"选列用中括号,筛选先布尔;

loc 对标签,iloc 对位置;

分组用 agg,保持形状 transform;

长宽 pivot&melt,连接 merge&concat;

缺失 fillna,类别 astype;

速度靠矢量化,实在不快就并行。"

相关推荐
杨小扩3 小时前
OpenAI Codex CLI 命令行参考笔记
人工智能·笔记
做cv的小昊4 小时前
大语言模型系统:【CMU 11-868】课程学习笔记06——Transformer学习(Transformer)
笔记·学习·语言模型
Vae_Mars6 小时前
华睿MVP:C#脚本的应用一
笔记·c#
_muffinman6 小时前
Java学习笔记-第2章 运算和语句
java·笔记·学习
六元七角八分6 小时前
学习笔记一《JavaScript基础语法》
javascript·笔记·学习
风酥糖7 小时前
在Termux中运行Siyuan笔记服务
android·linux·服务器·笔记
跃龙客7 小时前
C++写文件笔记
c++·笔记
宵时待雨7 小时前
C++笔记归纳11:多态
开发语言·c++·笔记
阿钱真强道7 小时前
11 数据预处理-数据集成与重复数据处理
pandas·数据清洗·数据集成·merge·数据合并·重复数据处理·drop_duplicates
李昊哲小课8 小时前
NumPy 完整学习笔记
笔记·python·学习·数据分析·numpy