1. 读取数据
import pandas as pd
df = pd.read_csv('data.csv')
-
也可以使用
read_excel,read_json,read_sql,read_parquet等。
2. 查看数据基本信息
df.head() # 查看前5行
df.tail() # 查看后5行
df.info() # 数据类型与缺失信息
df.describe() # 数值型列的统计摘要
3. 选择行列
df['列名'] # 选择单列
df[['列1', '列2']] # 选择多列
df.iloc[0:3] # 通过位置选取行
df.loc[df['列名'] > 100] # 条件筛选
4. 缺失值处理
df.isna().sum() # 每列缺失值数量
df.dropna() # 删除含缺失值的行
df.fillna(0) # 填充缺失值
5. 数据排序
df.sort_values(by='列名', ascending=False)
6. 新增列 / 修改列
df['新列'] = df['列1'] + df['列2'] # 新增列
df['列1'] = df['列1'].apply(lambda x: x*2) # 修改列
7. 分组聚合(groupby)
df.groupby('列名')['数值列'].mean() # 求平均
df.groupby(['列1', '列2']).agg({'值': 'sum'}) # 多重分组
8. 去重
df.drop_duplicates() # 删除重复行
df.drop_duplicates(subset='列名') # 根据某列去重
9. 合并与连接
pd.concat([df1, df2]) # 纵向拼接
pd.merge(df1, df2, on='id') # 横向关联(类SQL的join)
10. 导出数据
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', index=False)
11. 多格式读取
df_csv = pd.read_csv('data.csv', sep=';', encoding='utf-8') # 自定义分隔符、编码
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet2') # 指定工作表
df_json = pd.read_json('data.json', orient='records') # 控制 JSON 解析方式
12. 条件读取(跳过行、指定列)
df = pd.read_csv('data.csv', skiprows=3, usecols=['col1', 'col3']) # 跳过前3行、选特定列
13. 导出增强
df.to_csv('output.csv', sep='|', na_rep='-', index=False) # 自定义分隔符、缺失值填充
df.to_excel('output.xlsx', sheet_name='Result', freeze_panes=(1,1)) # 冻结首行首列
14. 扩展预览
df.sample(3) # 随机选3行预览(避免首尾偏差)
df.head(10).T # 转置前10行,适合列多的场景
15. 深度信息校验
df.dtypes.value_counts() # 各数据类型的列数统计
df.memory_usage(deep=True) # 详细内存占用(含对象列)
16. 唯一值与频率
df['col'].unique() # 列唯一值
df['col'].value_counts(normalize=True) # 频率占比(百分比)
17. 索引重塑
df.set_index('date_col', drop=True, inplace=True) # 设日期列为索引
df.reset_index(drop=False) # 还原索引为普通列
18. 切片进阶(标签 + 位置)
df.loc['2023-01-01':'2023-01-10', 'col1':'col3'] # 标签切片(日期/字符串索引)
df.iloc[::5, [0, 2]] # 每5行取1行,选第0、2列
19. 批量重命名
df.rename(columns=lambda x: x.lower().replace(' ', '_'), inplace=True) # 列名标准化
20. 智能缺失填充
df['col'] = df['col'].fillna(df['col'].median()) # 中位数填充(替代固定值)
df.interpolate(method='linear', limit_direction='both') # 线性插值填充
21. 异常值检测(IQR 法)
Q1, Q3 = df['col'].quantile([0.25, 0.75])
IQR = Q3 - Q1
df = df[(df['col'] >= Q1 - 1.5*IQR) & (df['col'] <= Q3 + 1.5*IQR)] # 过滤异常值
22. 缺失值可视化(辅助分析)
import missingno as msno
msno.matrix(df) # 缺失值矩阵图(需安装 missingno)
23. 矢量化运算(替代 apply)
df['new_col'] = df['col1'] * 2 + df['col2'].abs() # 纯矢量化,效率更高
24. 时间序列转换
df['date'] = pd.to_datetime(df['date'], format='%Y/%m/%d') # 强制转换格式
df['month'] = df['date'].dt.month_name() # 提取月份名称
25. 类别型数据处理
df['cat_col'] = df['cat_col'].astype('category') # 转换为类别类型(节省内存)
df['cat_col'] = df['cat_col'].cat.reorder_categories(['A', 'B', 'C'], ordered=True) # 自定义顺序
26. 多指标聚合
df.groupby('category')['value'].agg(['mean', 'median', 'std']) # 多统计量
df.groupby('category').agg(min_val=('value', 'min'), max_val=('value', 'max')
) # 自定义列名
27. 滚动聚合(时间窗口)
df.set_index('date')['value'].rolling(window=7).mean() # 7天滚动平均
28. 分组过滤
df.groupby('category').filter(lambda x: len(x) > 10) # 保留分组长度>10的组
29. 多表智能合并
df_merged = pd.merge(df1, df2, on='id', how='outer', indicator=True) # 外连接+来源标记
df_merged.query('_merge == "both"') # 筛选仅共同存在的记录
30. 按索引拼接
df_concat = pd.concat([df1, df2], axis=1, join='inner') # 按索引横向拼接(取交集)
31. 合并进度监控(大数据场景)
from tqdm import tqdm
tqdm.pandas()
df_merged = df1.progress_merge(df2, on='id') # 显示合并进度条(需安装 tqdm)
32. 批量行处理(替代 for 循环)
df['new_col'] = np.where(df['col'] > 0, 'Positive', 'Negative') # 矢量化条件判断
33. 迭代器模式(处理超大文件)
for chunk in pd.read_csv('large.csv', chunksize=1000):process(chunk) # 分块处理,避免内存爆炸
34. 数据透视表
pd.pivot_table(df, values='value', index='category', columns='date', aggfunc='sum')
35. 逆透视(宽表转长表)
df_melted = df.melt(id_vars=['id', 'category'], var_name='date', value_name='value')
36. 延迟计算(Polars 风格,Pandas 2.0+)
df = pd.read_csv('data.csv', engine='pyarrow') # 使用 Arrow 引擎加速
df = df.astype({'col': 'int32'}) # 缩小数据类型(如 int64→int32)
37. 代码调试(查看中间步骤)
def process(df):df = df.query('col > 0')df = df.assign(new_col=df['col'] * 2)return df.pipe(print, "处理后前5行:") # 管道中插入调试
38. 内存优化报告
def df_mem_report(df):print(df.info(memory_usage='deep'))return df.convert_dtypes() # 自动转换为更高效的类型
df = df_mem_report(df)
39. 快速统计可视化(一行代码)
df['col'].plot(kind='hist', bins=30, title='分布') # 直接生成直方图(需 matplotlib)
40. 关联分析(热力图前置)
corr = df.select_dtypes(include='number').corr() # 数值列相关系数矩阵
corr.style.background_gradient(cmap='coolwarm') # 可视化热力图(Notebook 中)
