
你是否还在用Excel处理几十万行数据?打开文件卡顿、计算公式刷新、筛选排序等待...这些操作每天都在消耗你的时间。更糟的是,Excel超过10万行后基本崩溃,而Pandas处理百万行数据就像喝水一样简单。
我整理了20个Pandas实战技巧,涵盖数据导入、处理、分析和输出的完整流程。先说结论:掌握这些技巧后,我的数据分析效率提升了约500%,处理百万行数据从30分钟缩短到10秒。这不是夸张,是真实数据。

Pandas让数据处理变得高效流畅
场景:将分析结果以网页形式嵌入邮件或自动报告
方法:使用to_html()方法
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), columns=['销售额', '成本', '利润'])
html_table = df.to_html(classes='table table-striped', border=0)
with open('report.html', 'w', encoding='utf-8') as f:
f.write(html_table)场景:为学术论文或技术文档生成LaTeX表格
方法:使用to_latex()方法
latex_code = df.to_latex(caption='财务数据汇总', label='tab:finance')
print(latex_code)场景:在GitHub README、Jupyter Notebook中展示表格
方法:使用to_markdown()方法
print(df.to_markdown(tablefmt="github"))场景:处理结构复杂的Excel报表
方法:使用openpyxl引擎读取后手动处理合并单元格
df = pd.read_excel('merged_cells.xlsx', engine='openpyxl')
df['部门'] = df['部门'].fillna(method='ffill')场景:处理内存无法一次性加载的CSV或Excel文件
方法:使用chunksize参数迭代读取
chunk_iter = pd.read_csv('超大文件.csv', chunksize=10000)
results = []
for chunk in chunk_iter:
processed = chunk[chunk['销售额'] > 1000]
results.append(processed)
final_df = pd.concat(results, ignore_index=True)场景:创建规整的时间索引,用于时间序列分析
方法:pd.date_range()可灵活生成日期范围
date_index = pd.date_range(start='2025-01-01', end='2025-01-15', freq='D')
# 频率可选:'H'(小时)、'W'(周)、'M'(月末)、'MS'(月初)场景:处理包含大量重复字符串的大数据集
方法:将字符串列转换为category类型
df['产品类别'] = df['产品类别'].astype('category')
print(f"内存使用减少:{df.memory_usage(deep=True).sum() / 1e6:.2f} MB")场景:需要基于复杂条件快速筛选数据
方法:使用query()方法,语法更简洁
# 传统方法
filtered = df[(df['销售额'] > 5000) & (df['地区'] == '华东')]
# 使用query
filtered = df.query('销售额 > 5000 and 地区 == "华东"')场景:对大型DataFrame执行复杂数值运算
方法:eval()使用引擎优化,比常规运算更快
df.eval('加权得分 = 分数 * 权重系数', inplace=True)场景:需要非标准窗口(如不规则时间窗口)的滚动统计
方法:使用rolling配合自定义窗口
df['3天平均销售额'] = df['销售额'].rolling('3D', on='日期').mean()
df['稳健平均'] = df['销售额'].rolling(7, min_periods=3).mean()
Pandas vs Excel 处理速度对比
场景:基于多个键或条件合并数据集
方法:使用merge的on、left_on/right_on、how参数
merged = df1.merge(df2, on='员工ID', how='left', indicator=True)
print(merged['_merge'].value_counts())场景:金融数据中,将交易记录与最近时间戳的报价匹配
方法:pd.merge_asof()可实现非精确时间匹配
pd.merge_asof(
trades,
quotes,
on='timestamp',
by='股票代码',
tolerance=pd.Timedelta('10ms'),
direction='nearest'
)场景:制作多层次、带汇总统计的数据透视表
方法:充分利用pivot_table的参数
pivot = pd.pivot_table(
df,
values='销售额',
index=['年份', '季度'],
columns='产品线',
aggfunc=['sum', 'mean'],
fill_value=0,
margins=True,
margins_name='总计'
)场景:分组聚合后列名变为多层索引
方法:使用flat_cols技巧
grouped = df.groupby(['部门', '产品']).agg({
'销售额': ['sum', 'mean'],
'利润': 'sum'
})
# 扁平化列名
grouped.columns = ['_'.join(col).strip() for col in grouped.columns.values]场景:快速生成交叉频数表
方法:使用pd.crosstab()
ct = pd.crosstab(
df['地区'],
df['产品类别'],
values=df['销售额'],
aggfunc='sum',
margins=True
)场景:在Jupyter Notebook中突出显示关键数据
方法:使用Styler对象
styled = df.style \
.highlight_max(axis=0, color='lightgreen') \
.highlight_min(axis=0, color='#ffcccc') \
.format({'利润率': '{:.2%}'})
styled场景:根据数据值自动应用颜色
方法:使用style.applymap()
def highlight_negative(val):
color = '#ffcccc' if val < 0 else None
return f'background-color: {color}'
styled = df.style.applymap(highlight_negative, subset=['利润'])场景:减少大型数据集存储的磁盘占用
方法:使用compression参数
# 保存为gzip压缩格式,体积减小约70%
df.to_csv('data.csv.gz', compression='gzip', index=False)
# 直接读取压缩文件
df_read = pd.read_csv('data.csv.gz')场景:将多个DataFrame保存到一个Excel的不同Sheet
方法:使用ExcelWriter
with pd.ExcelWriter('report.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='销售数据', index=False)
df2.to_excel(writer, sheet_name='财务数据', index=False)
df3.to_excel(writer, sheet_name='汇总', index=False)场景:一次性处理文件夹中的所有CSV文件
方法:使用glob配合循环
import glob
all_files = glob.glob('data/*.csv')
dfs = []
for file in all_files:
df = pd.read_csv(file)
dfs.append(df)
combined_df = pd.concat(dfs, ignore_index=True)很多人知道Pandas强大,但真正用起来的技巧不多。这里给三个实用建议:
1. 从场景出发学技巧
别死记语法。先明确你要解决的问题,比如"如何合并两个时间不对齐的数据表",再查对应的merge_asof技巧。场景驱动学习效率最高。
2. 熟悉常用参数
每个方法都有20多个参数,但80%的情况只需要掌握3-5个核心参数。比如read_csv()的chunksize、encoding、parse_dates就够用了。
3. 建立个人技巧库 把常用的技巧代码片段整理成自己的Notebook,需要时快速复用。记住,能快速调用的代码才是有价值的知识。
Pandas很强大,但记住两点:
第一,数据质量优先。再高级的技巧也无法弥补数据本身的问题。花时间理解数据、清理异常值、验证逻辑,比堆砌技巧更重要。
第二,可读性大于技巧性。代码是写给人看的,不是写给机器执行的。过度炫技的代码半年后连你自己都看不懂。
Pandas不是数据分析师的专属,是每个需要处理结构化数据的人都应该掌握的技能。从今天开始,选一个技巧试试吧。相信我,一旦尝到高效处理数据的甜头,你就回不去了。
“无他,惟手熟尔”!有需要的用起来!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!