数据处理python与vba_Excel数据处理你是选择Vba还是Python?当然选择pandas

前言中数据和需求数据的案例如下:每个计费的销售记录的人被描述为:销售人员\u201C张三\u201D(计费部门),卖5块xxx产品(产品代码、产品名称)(数量)),此订单的总价格是2000元(总价格和税收)。以上括号列标题数据表中的行。有许多无效的行。只要订购部门列出的名称,它是有效的在这种情况下,数据随机生成和替换所有敏感数据。需求的结果如下:根据销售人员,产品代码,总结产品的数量和总价格和税收。每个销售人员生成一个单独的表输出,最后输出所有商品的汇总表。vba的计划是短的分析vba的解决方案是尽可能地在一个面向对象的方式进行。下图展示了主要的结构:m_main模块主要包含整个流程逻辑,和输入方法主要类模块D_ArrayVar D_GVar用于改变列数据源的位置。

有关键积累C_GetFile Msys_Function逻辑模块和类模块,帮助类很久以前写的了。vba的如果你是一个高级用户,你可能认为你可以直接用词典+数组方法可以完成,但是注意,直接词典+数组方法将导致代码难以维护。Python的解决方案。上述vba的解决方案,我大概花了将近一个小时(写作类模块vba太麻烦)。有一个需求变化,由于面向对象的优势,响应可以在几分钟内完成,和不需要大规模的测试。然而,如果这种需求是在Python中,多少可以提高我们处理效率呢?我使用Python的熊猫包进行处理,并在5分钟内完成,代码非常可读的和可扩展的。这次我们直接使用熊猫读写excel数据不使用xlwings图书馆。

所有文本类型的内容,先用一致,也就是说,去组中的第一个条目,然后定义excel数据装载到DataFrame:由于数据源的标题是在第三行,当调用read_excel,头的参数设置为None,这意味着不需要使用excel的头的数据行DataFrame [header_idx:],阅读的内容指定的行,并分配它的头df(子集= [g_pName]),在name列删除空行,然后可以生成结果,如下:(关口).agg (g_agg_funcs),集团销售人员和产品和计算结果,在熊猫就是这么简单然而,我们需要一个单独的表为每个销售人员输出结果。如下图所示:思想(\这里首先创建一个ExcelWriter对象_level_values(0)销售人员列从分组结果,但这里的输出是重复的值,所以我们需要使用重复idx:通过一个销售人员,即你可以得到这个销售人员的产品汇总结果(它是一个DataFrame)。

你可能会问,还有一个基于产品总结结果非常简单,因为总结的方法是一样的,但是summary字段已经改变了。如下:在这里我们又故意写ExcelWriter。这一次我们将数据附加到现有的excel文件,所以它的参数模式=\u201Ca\u201D意味着追加。使用append模式,您需要使用openpyxl引擎,所以你需要设置引擎=\u201Copenpyxl\u201D。新的需求。完成的代码之后,如果你需要添加一个列到总结结果平均单价列,在Python的解决方案,你只需要添加单价列的统计方法在g_agg_funcs的定义,如下:如果在vba计划,当前的修改相对比较容易(添加逻辑sku类的add方法模块),但它似乎与Python方案相比效率低下。

如果你需要输出相同的excel文件多次在熊猫,您可以使用ExcelWriter。注意,append模式需要设置参数引擎=\u201Copenpyxl\u201D

你可能感兴趣的:(数据处理python与vba)