py880函数库:让Pandas透视表和Excel操作更强大

前言

在python数据分析工作中,我们经常需要制作透视表和操作Excel文件。虽然Pandas提供了基础功能,但在实际使用中总有一些痛点:

  • · Pandas透视表功能有限:无法实现复杂的自定义聚合,多层表头处理繁琐
  • · Excel文件必须关闭才能写入:反复开关文件严重影响调试节奏
  • · 缺少像VBA那样的实时调试能力:无法在Excel打开的状态下即时查看结果

为了解决这些问题,我开发了py880函数库,对Pandas进行了全面增强。今天重点介绍三个核心功能:

  1. 1. z超级透视表 – 比Pandas更强大的透视表功能
  2. 2. vba.excel读取到df – 实时读取Excel数据
  3. 3. vba.excel写入 – 在Excel打开状态下实时写入数据
  4. 本函数库对 郑广学python办公自动化 所有学员免费发放 
  5. 下载code880项目模板v.4.1即可直接使用

一、突破性功能:实时读写打开的Excel文件

传统Pandas的痛点

使用原生Pandas操作Excel时,必须:

  1. 1. 关闭Excel文件
  2. 2. 运行Python代码写入
  3. 3. 打开Excel文件查看结果
  4. 4. 发现问题,关闭文件
  5. 5. 修改代码,重复上述步骤…

这种工作流程严重影响调试效率! 

如果不关闭文件 写入就会报错

py880的解决方案:具备VBA对等的实时调试能力

py880函数库通过调用Excel COM对象,实现了在Excel打开状态下的实时读写,就像使用VBA一样!

核心函数介绍

1. vba.excel读取到df(范围)

从Excel中实时读取数据到Pandas DataFrame

from py880 import vba

# 直接读取当前打开的Excel文件
df = vba.excel读取到df("A1:J1""数据")  # 从"数据"工作表读取
# 或者使用Range对象
df = vba.excel读取到df(Application.Range("A1:G6"))

2. vba.excel写入(数据, 目标位置)

将数据实时写入到打开的Excel文件

# 写入列表数据
vba.excel写入(列表数据, "test!A1")

# 写入DataFrame(自动转换)
vba.excel写入(df, sheet.Range("A2"))

# 返回写入的Range对象,可以继续操作
rng = vba.excel写入(数据, "A1")
rng.EntireColumn.AutoFit()  # 列宽自适应
实时读写excel文件 excel可正常使用

完整使用示例

from py880 import vba
from py880.log_helper import logtable

# 准备测试数据
列表 = [
    ['分类''分类''产品信息''产品信息''产品信息''销售数据''销售数据'],
    ['大类''小类''名称''型号''价格''数量''总额'],
    ['电子''手机''iPhone''14 Pro'799950399950],
    ['电子''电脑''MacBook''Air M2'899930269970],
    ['家电''冰箱''海尔''BCD-470'39992079980],
]

# 获取Excel Application对象,像VBA一样操作
Application = vba.excel.Application
sht = Application.Sheets.Add()

# 实时写入数据
sht.Range("A1").Value = "test"
sht.Range("A1").Interior.Color = vba.RGB("#07C160")  # 设置单元格颜色
vba.excel写入(列表, sht.Range("A2"))

# 实时读取数据
数据 = vba.excel读取到list(Application.Range("A2:G6"))
logtable(数据)  # 在控制台以表格形式查看


<图片>

关键优势总结

特性
原生Pandas
py880函数库
文件状态
必须关闭
可以打开
调试效率
反复开关文件
实时查看结果
操作方式
仅文件读写
完整VBA对象模型
单元格格式
不支持
完全支持(颜色、字体等)
即时反馈
学习成本
需学新API
会VBA即会用

二、z超级透视表:从简单到复杂的全场景支持

为什么需要z超级透视表?

Pandas原生的pivot_table功能有限:

  • · 聚合函数只能用简单的sum、mean等
  • · 多层表头处理复杂
  • · 无法实现自定义复杂计算
  • · 输出格式不符合Excel使用习惯

z超级透视表完全兼容Pandas语法,同时提供强大的扩展功能!


场景1:基础透视(与Pandas对比)

示例数据

字典形式数据 = {
    '地区': ['北京''北京''上海''上海','北京''北京''上海''上海'],
    '产品': ['手机''电脑''手机''电脑','手机''电脑''手机''电脑'],
    '客户类型': ['个人'] * 4 + ['公司'] * 4,
    '销量': [100501206080409055],
    '单价': [50008000520082005100810053008300],
    '成本': [30005000310051003050505031505150],
}
df = pd.DataFrame(字典形式数据)
地区
产品
客户类型
销量
单价
成本
北京
手机
个人
100
5000
3000
北京
电脑
个人
50
8000
5000
上海
手机
个人
120
5200
3100
上海
电脑
个人
60
8200
5100
北京
手机
公司
80
5100
3050
北京
电脑
公司
40
8100
5050
上海
手机
公司
90
5300
3150
上海
电脑
公司
55
8300
5150

Pandas原生写法

透视 = pd.pivot_table(
    df,
    index='地区',
    columns='产品',
    values=['销量''单价'],
    aggfunc={'销量''sum''单价''mean'}
)

z超级透视表写法

from py880.pandas_helper import z超级透视表

透视结果 = z超级透视表(
    数据框=df,
    行字段=['地区'],
    列字段=['产品'],
    聚合字典={
        '总销量': ('销量''sum'),
        '平均单价': ('单价''mean'),
        '记录行数': ('产品''count')
    },
    转列表=False
)

输出结果


场景2:自定义聚合(Pandas难以实现)

需求:显示销量明细(用+号连接)

透视结果 = z超级透视表(
    数据框=df,
    行字段=['地区'],
    列字段=['产品'],
    聚合字典={
        '总销量': ('销量''sum'),
        '销量明细': ('销量'lambda x: '+'.join(map(str, x.tolist()))),
        '平均单价': ('单价''mean'),
        '记录行数': ('产品''count')
    },
py880函数库:让Pandas透视表和Excel操作更强大
    转列表=False
)

输出结果:


场景3:复杂业务计算(z超级透视表独有)

需求:计算收入、成本、利润、利润率

Pandas的pivot_table无法实现跨字段的复杂计算!

z超级透视表支持lambda函数形式,可以访问分组后的完整DataFrame:

透视结果2 = z超级透视表(
    数据框=df,
    行字段=['地区''客户类型'],
    列字段=['产品'],
    聚合字典={
        '总销量': ('销量''sum'),
        '平均单价': ('单价''mean'),
        '总收入'lambda g: (g['销量'] * g['单价']).sum(),
        '总成本'lambda g: (g['销量'] * g['成本']).sum(),
        '总利润'lambda g: ((g['单价'] - g['成本']) * g['销量']).sum(),
        '利润率%'lambda g: (((g['单价']-g['成本'])*g['销量']).sum() / 
                            (g['销量']*g['单价']).sum() * 100)
    },
    表头合并=1,
    转列表=False
)

输出结果:


场景4:结合数据框排序功能

from py880.pandas_helper import z数据框表头排序

# 对透视结果排序:地区降序,产品升序
排序结果 = z数据框表头排序(透视结果2, ["地区-"'产品+'])

z超级透视表参数说明

z超级透视表(
    数据框,              # 输入的DataFrame
    行字段=[],           # 行分组字段列表
    列字段=[],           # 列分组字段列表
    聚合字典={},         # 聚合规则字典
    表头合并=0,          # 是否合并表头(1=合并)
    转列表=False,        # 是否转换为列表输出
    小数位数=2           # 数值小数位数(None=不处理)
)

聚合字典支持两种形式:

  1. 1. 元组形式'输出列名': ('源字段', '聚合函数')
  • · 聚合函数可以是:’sum’, ‘mean’, ‘count’, ‘min’, ‘max’等
  • · 也可以是lambda函数
  • 2. 函数形式'输出列名': lambda g: 复杂计算表达式
    • · g是分组后的DataFrame,可以进行任意复杂计算

    三、完整工作流程示例

    下面演示一个完整的数据分析流程:

    import pandas as pd
    from py880 import vba
    from py880.pandas_helper import z数据框转列表, z超级透视表, z数据框表头排序
    from py880.log_helper import logtable

    # 1. 从Excel读取数据(Excel保持打开状态)
    df = vba.excel读取到df("A1:J1""数据")
    logtable(df)  # 在控制台查看数据

    # 2. 数据透视分析
    透视结果 = z超级透视表(
        数据框=df,
        行字段=["产品名称""产品型号"],
        列字段=['地区''客户类型'],
        聚合字典={
            '销售数量': ('销售数量''sum'),
            '平均单价': ('单价''mean'),
            '总收入'lambda g: (g['销售数量'] * g['单价']).sum(),
        },
        转列表=False,
        小数位数=2
    )

    # 3. 数据排序
    透视结果 = z数据框表头排序(透视结果, ["产品名称""产品型号"])
    logtable(透视结果, 显示行数=200)

    # 4. 写回Excel(实时显示结果,无需关闭文件!)
    vba.excel写入(透视结果, "数据!U2")

    # 5. 美化格式
    rng = vba.excel写入(透视结果, "结果!A1")
    rng.EntireColumn.AutoFit()  # 自动调整列宽

    四、功能对比总结

    Pandas vs z超级透视表

    功能特性
    Pandas pivot_table
    z超级透视表
    基础聚合
    ✅ 支持
    ✅ 支持
    自定义聚合
    ⚠️ 有限支持
    ✅ 完全支持
    跨字段计算
    ❌ 不支持
    ✅ 支持lambda函数
    多层表头
    ⚠️ 格式复杂
    ✅ 自动合并
    直接输出列表
    ❌ 需手动转换
    ✅ 一键转换
    小数位控制
    ❌ 需后处理
    ✅ 内置支持
    中文参数
    ❌ 英文
    ✅ 中文友好

    原生Pandas vs py880文件操作

    功能特性
    原生Pandas
    py880函数库
    读取Excel
    df = pd.read_excel()
    df = vba.excel读取到df()
    文件状态
    必须关闭
    可以打开
    写入速度
    较慢
    极快
    格式设置
    需openpyxl
    直接用VBA对象
    调试体验
    反复开关文件
    实时查看结果
    学习曲线
    学习新API
    会VBA即会用

    五、安装使用

    安装依赖

    # 如果需要使用pandas相关功能
    uv add pandas openpyxl pywin32 psutil pypinyin

    # 或使用pip
    pip install pandas openpyxl pywin32 psutil pypinyin

    导入使用

    from py880 import vba
    from py880.pandas_helper import z超级透视表, z数据框转列表, z数据框表头排序
    from py880.log_helper import logtable, logjson

    注意事项

    1. 1. WPS用户:需先切换为独立窗体模式
    2. 2. Excel状态:测试前需先打开一个Excel文件

    六、总结

    py880函数库的核心价值:

    🚀 提升调试效率

    • · 告别反复开关Excel文件
    • · 像VBA一样实时查看结果
    • · 保持Python的强大数据处理能力

    💪 增强透视表功能

    • · 支持复杂的跨字段计算
    • · 自定义聚合函数
    • · 符合Excel使用习惯的输出格式

    🎯 降低学习成本

    • · 中文参数,更易理解
    • · 兼容Pandas语法
    • · 会VBA就会用Excel操作

    如果你也被Pandas的限制困扰,不妨试试py880函数库!

    欢迎交流讨论,共同改进! 

    作者:郑广学 
    更新日期:2025年11月9日