数据筛选:Namedtuple 的运用

数据筛选:Namedtuple 的使用

一、需求:

在这里插入图片描述
需要对上面xls文档进行数据筛选。当要多列数据结合统计时,使用Namedtuple比字典高效。

二、原因:

Namedtuple比普通tuple具有更好的可读性,可以使代码更易于维护。同时与字典相比,又更加的轻量和高效。但是有一点需要注意,就是namedtuple中的属性都是不可变的。任何尝试改变其属性值的操作都是非法的。

三、使用:

为了构造一个namedtuple需要两个参数,分别是tuple的名字和其中域的名字。比如,tuple的名字是“apply”,它包括三个域,分别是“box_type”、“option”和“trade”。

  1. 源码
import json
from collections import namedtuple
import numpy as np

applies = ('box_type', 'option', 'trade')
box_type = ("40RH", "45HC", "40HC", "40ST", "20ST")
all_boxes = {
    '未申请': {},
    '已申请未打印': {},
    '已提箱': {},
    '已打印': {}
}

apply = namedtuple("apply", applies)
# usecols=(5, 10, 31),分别获取第 6, 11,32 这三列
resources = np.array(np.loadtxt(
    'report_customized_20211205134657.csv',
    dtype=str, delimiter=',', skiprows=1, usecols=(5, 10, 31), encoding='gbk'))

for result in map(apply._make, resources):
    if result.trade == 'EUROPE':
        if result.box_type in box_type:
            if result.box_type not in all_boxes[result.option]:
                all_boxes[result.option][result.box_type] = 1
            else:
                all_boxes[result.option][result.box_type] += 1

info = json.dumps(all_boxes, indent=4, ensure_ascii=False)
print(f"统计结果: {info}")

  1. 结果
namedtupl:
	apply(box_type='40ST', option='已提箱', trade='EUROPE')

统计结果: {
    "未申请": {
        "40HC": 285,
        "40ST": 58,
        "20ST": 79,
        "40RH": 34
    },
    "已申请未打印": {
        "40HC": 76,
        "20ST": 38,
        "40RH": 1,
        "40ST": 28
    },
    "已提箱": {
        "40RH": 31,
        "40HC": 623,
        "20ST": 205,
        "40ST": 191,
        "45HC": 1
    },
    "已打印": {
        "40HC": 6,
        "40ST": 2,
        "20ST": 2
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值