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;

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

相关推荐
自小吃多20 小时前
TMC220X芯片 串口工具连接交互
笔记·嵌入式硬件
ZhiqianXia20 小时前
PyTorch学习笔记(6) : torch.autograd
pytorch·笔记·学习
网络工程小王20 小时前
【提示词工程和思维链的讲解】学习笔记
人工智能·笔记·学习
后藤十八里20 小时前
极验4消消乐验证码逆向笔记
笔记·爬虫·python
数据科学小丫20 小时前
数据分析利器 Pandas :apply() 方法 + map() 配对 + 计算描述统计 + 协方差和相关性 + 异常值处理常用方法(基于 python )
python·数据分析·numpy·pandas
圣光SG21 小时前
项目分析与程序设计 学习笔记
笔记·学习·学习笔记·程序设计·项目分析
升职佳兴21 小时前
Excel:VLOOKUP 学习笔记 · 完整版
笔记·学习·excel
南境十里·墨染春水21 小时前
C++笔记 Lambda表达式
开发语言·c++·笔记
凉、介1 天前
深入理解组播
网络·笔记·学习·组播
布局呆星1 天前
Vue3 —— 监听器 (watch/watchEffect) 与 Props 组件通信
vue.js·笔记·学习