• pandas excel动态条件过滤并保存结果


    一、概述

    由于业务需求,需要对某个excel数据做查询。其中:

    excel文件名,不固定

    sheet数量,不固定

    过滤条件,不固定

    二、分析需求

    针对以上3个条件,都是不固定的。因此需要设计一个配置文件,内容如下:

    # 查询条件,多个条件,用逗号分隔
    where_dict = {
        # excel文件名
        "file_name": "456.xlsx",
        # 过滤条件
        "rules": [
            {
                "sheet_name": "Sheet1",
                "split_rule": ["性别=男", "年龄=21"]
            },
            {
                "sheet_name": "Sheet2",
                "split_rule": ["身高=170"]
            }
        ]
    }

    通过遍历这个字典,就可以了。

    三、演示

    先安装模块

    pip3 install pandas openpyxl

    现有一个456.xlsx,内容如下:

    Sheet1

    Sheet2

    Sheet3

     

    完整代码如下:

    # !/usr/bin/python3
    # -*- coding: utf-8 -*-
    import pandas as pd
    
    # 查询条件,多个条件,用逗号分隔
    where_dict = {
        # excel文件名
        "file_name": "456.xlsx",
        # 过滤条件
        "rules": [
            {
                "sheet_name": "Sheet1",
                "split_rule": ["性别=男", "年龄=21"]
            },
            {
                "sheet_name": "Sheet2",
                "split_rule": ["身高=170"]
            }
        ]
    }
    
    # 创建新的新的查询结果excel
    with pd.ExcelWriter('result.xlsx') as writer:
        file_name = where_dict['file_name']
        for i in where_dict['rules']:
            # print(i, type(i))
            # 查询条件
            where = ""
            # 打开指定的sheet
            df = pd.read_excel(file_name, sheet_name=i['sheet_name'])
            for j in i['split_rule']:
                # 切割条件
                key, value = j.split('=')
    
                # 判断数值是否为数字
                if value.isdigit():
                    # 拼接查询条件
                    where += "(df.%s==%s) & " % (key, value)
                else:
                    where += "(df.%s=='%s') & " % (key, value)
    
            # 去除末尾的&
            where = where.rstrip('& ')
            print(i['sheet_name'],'条件:',where)
            ret = df[eval(where)]
            # print(ret,type(ret))
    
            # 依次写入sheet
            ret.to_excel(writer, sheet_name=i['sheet_name'], index=False, header=True)
    View Code

    执行代码,输出:

    Sheet1 条件: (df.性别=='') & (df.年龄==21)
    Sheet2 条件: (df.身高==170)

    它会在当前目录生成result.xlsx,打开,结果如下:

    Sheet1

    Sheet2

     

  • 相关阅读:
    javascript 中的暗物质 闭包
    关于使用 jBox 对话框的提交问题
    Orchard 的项目结构解决方案文件夹的原理与使用
    翻译:创建 Windows8 应用 Part I: Hello, world!
    翻译:FireBug 1.10 新特性
    SQL数据库设计经验
    我的女孩
    在WINDOWS下安装MRTG全攻略网络流量监控
    ASP实用函数库
    DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
  • 原文地址:https://www.cnblogs.com/xiao987334176/p/14142832.html
Copyright © 2020-2023  润新知