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;

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

相关推荐
是孑然呀2 小时前
【笔记】影刀RPA+飞书多维表格
笔记·飞书·rpa
前端嘣擦擦2 小时前
避坑笔记:Chrome 144+ SVG 事件失效问题
前端·javascript·chrome·笔记·svg2
嵌入式×边缘AI:打怪升级日志2 小时前
基于ESP32S3的智能终端项目--3.quareLine Studio 绘制 LVGL 界面
笔记
瑶光守护者2 小时前
【学习笔记】树莓派上部署 OpenClaw
笔记·学习
雾岛听蓝2 小时前
C++异常处理
c++·经验分享·笔记
牛马大师兄2 小时前
数据结构复习 | 循环链表
c语言·数据结构·c++·笔记·链表
myloveasuka3 小时前
指令格式举例
汇编·笔记·计算机组成原理
今儿敲了吗3 小时前
32| 伐木
数据结构·笔记·学习·算法
日更嵌入式的打工仔3 小时前
FIQ 与 IRQ
arm开发·笔记