首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 15个Pandas技巧,提升数据分析效率

Python 15个Pandas技巧,提升数据分析效率

作者头像
用户11081884
发布2026-07-20 19:14:17
发布2026-07-20 19:14:17
1570
举报
文章被收录于专栏:科技专栏科技专栏

PandasPython数据分析的核心库,但许多用户只掌握了其基础功能。本文将介绍15个实用技巧,涵盖数据转换、处理、合并与优化等多个方面,帮助显著提升数据分析效率。每个技巧都包含应用场景、使用方法和代码示例。

1:DataFrame转HTML

场景:需要将分析结果以网页形式嵌入邮件或自动报告。

方法:使用 to_html() 方法。

代码语言:javascript
复制
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)

2:DataFrame转LaTeX

场景:为学术论文或技术文档生成LaTeX表格。

方法:使用 to_latex() 方法。

代码语言:javascript
复制
latex_code = df.to_latex(caption='财务数据汇总', label='tab:finance')
print(latex_code)

3:DataFrame转Markdown

场景:在GitHub README、Jupyter Notebook中展示表格。

方法:使用 to_markdown() 方法(需安装 tabulate 库)。

代码语言:javascript
复制
print(df.to_markdown(tablefmt="github"))

4:智能读取含合并单元格的Excel

场景:处理结构复杂的Excel报表。

方法:使用 openpyxl 引擎读取后手动处理合并单元格。

代码语言:javascript
复制
df = pd.read_excel('merged_cells.xlsx', engine='openpyxl')
# 使用fillna向前填充合并的单元格
df['部门'] = df['部门'].fillna(method='ffill')

5:使用 date_range 生成时间序列

场景:创建规整的时间索引,用于时间序列分析。

方法pd.date_range() 可灵活生成日期范围。

代码语言:javascript
复制
date_index = pd.date_range(start='2025-01-01', end='2025-01-15', freq='D')
# 频率可选:'H'(小时)、'W'(周)、'M'(月末)、'MS'(月初)

6:条件合并

场景:基于多个键或条件合并数据集。

方法:使用 mergeon 、 left_on / right_on 、 how 参数。

代码语言:javascript
复制
# 合并时添加指示列,显示合并来源
merged = df1.merge(df2, on='员工ID', how='left', indicator=True)
print(merged['_merge'].value_counts())

7:最近时间合并

场景:金融数据中,将交易记录与最近时间戳的报价匹配。

方法pd.merge_asof() 可实现非精确时间匹配。

代码语言:javascript
复制
pd.merge_asof(
    trades,          # 交易DataFrame
    quotes,          # 报价DataFrame
    on='timestamp',  # 时间列
    by='股票代码',    # 分组键
    tolerance=pd.Timedelta('10ms'),  # 允许的最大时间差
    direction='nearest'  # 匹配方向
)

8:分类数据内存优化

场景:处理包含大量重复字符串的大数据集。

方法:将字符串列转换为 category 类型。

代码语言:javascript
复制
df['产品类别'] = df['产品类别'].astype('category')
print(f"内存使用减少:{df.memory_usage(deep=True).sum() / 1e6:.2f} MB")

9:分块读取超大文件

场景:处理内存无法一次性加载的CSVExcel文件。

方法:使用 chunksize 参数迭代读取。

代码语言:javascript
复制
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)

10:高效过滤与查询

场景:需要基于复杂条件快速筛选数据。

方法:使用 query() 方法,语法更简洁。

代码语言:javascript
复制
# 传统方法
filtered = df[(df['销售额'] > 5000) & (df['地区'] == '华东')]
# 使用query
filtered = df.query('销售额 > 5000 and 地区 == "华东"')

11:数据透视表

场景:制作多层次、带汇总统计的数据透视表。

方法:充分利用 pivot_table 的参数。

代码语言:javascript
复制
pivot = pd.pivot_table(
    df,
    values='销售额',
    index=['年份', '季度'],
    columns='产品线',
    aggfunc=['sum', 'mean'],
    fill_value=0,
    margins=True,  # 添加总计
    margins_name='总计'
)

12:样式化DataFrame输出

场景:在Jupyter Notebook中突出显示关键数据。

方法:使用 Styler 对象。

代码语言:javascript
复制
styled = df.style \
    .highlight_max(axis=0, color='lightgreen') \
    .highlight_min(axis=0, color='#ffcccc') \
    .format({'利润率': '{:.2%}'})
styled

13:保存时压缩数据

场景:减少大型数据集存储的磁盘占用。

方法:使用 compression 参数。

代码语言:javascript
复制
# 保存为gzip压缩格式,体积减小约70%
df.to_csv('data.csv.gz', compression='gzip', index=False)
# 直接读取压缩文件
df_read = pd.read_csv('data.csv.gz')

14:使用 eval() 进行高性能计算

场景:对大型DataFrame执行复杂数值运算。

方法 eval() 使用引擎优化,比常规运算更快。

代码语言:javascript
复制
# 计算加权得分(大数据集下速度更快)
df.eval('加权得分 = 分数 * 权重系数', inplace=True)

15:自定义滚动窗口计算

场景:需要非标准窗口(如不规则时间窗口)的滚动统计。

方法:使用 rolling 配合自定义窗口。

代码语言:javascript
复制
# 计算过去3天的滚动平均(跳过NaN)
df['3天平均销售额'] = df['销售额'].rolling('3D', on='日期').mean()
# 使用最小观测值数量
df['稳健平均'] = df['销售额'].rolling(7, min_periods=3).mean()

掌握这些Pandas技巧,能让数据分析工作流更加流畅高效。从数据I/O优化、内存管理,到高级合并与灵活计算,每个技巧都针对实际工作中的常见痛点。建议在实际项目中尝试应用,并根据具体需求调整参数,以最大化提升生产力。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1:DataFrame转HTML
  • 2:DataFrame转LaTeX
  • 3:DataFrame转Markdown
  • 4:智能读取含合并单元格的Excel
  • 5:使用 date_range 生成时间序列
  • 6:条件合并
  • 7:最近时间合并
  • 8:分类数据内存优化
  • 9:分块读取超大文件
  • 10:高效过滤与查询
  • 11:数据透视表
  • 12:样式化DataFrame输出
  • 13:保存时压缩数据
  • 14:使用 eval() 进行高性能计算
  • 15:自定义滚动窗口计算
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档