• 推荐一种更加便捷的 Python 数据处理方式


    在 Python 的数据处理方面经常会用到一些比较常用的数据处理方式,比如pandas、numpy等等。

    今天介绍的这款 Python 数据处理的管道数据处理方式,通过链式函数的方式可以轻松的完成对list列表数据的处理。通过类似于shell编程中的管道符对处理条件进行筛选从而更快速的完成对数据的处理操作。

    由于pipe是第三方提供的非标准库,所以需要使用pip的方式进行安装。

    pip install pipe -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
    # Importing the pipe module.
    import pipe
    
    # Importing the pprint function from the pprint module.
    from pprint import pprint
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    关于pipe提供的数据处理函数主要包含六种,分别是dedup()、traverse()、filter()、groupby()、select()、sort(),通过函数间的不同组合可以完成不同的数据处理效果。

    技术提升

    文章源码、数据、技术提升都可轻松获取,本文来自粉丝群小伙伴授权分享,可以加入我们,目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

    方式、添加微信号:dkl88191,备注:来自CSDN +python
    方式、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    1、dedup()去重并排序

    数据去重比较好操作,就是去除一个列表中的重复数据,如果是数字类型的list列表,可以对原始值进行去重也可以对其绝对值进行去重操作。

    list_ = (
            [-6, -5, 0, 1, 5, 5] |
            pipe.dedup |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [-6, -5, 0, 1, 5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    也可以通过设置dedup()函数的属性对绝对值进行去重操作。

    list_ = (
            [-6, -5, 0, 1, 5, 5] |
            pipe.dedup(key=abs) |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [-6, -5, 0, 1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2、traverse()拆分嵌套数组

    为了展示效果,我创建了一个多重数组的列表通过使用traverse()函数完成拆分。

    list_ = (
            [-1, 0, [2, 4, [5, 6, [3, 2, 5]]]] |
            pipe.traverse |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [-1, 0, 2, 4, 5, 6, 3, 2, 5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从结果发现,已经将我们定义的一个四层的list列表完全的拆分了。

    3、filter()数据筛选

    创建一组list列表数据并筛选出列表中的值大于10的数据并返回筛选后的列表数据。

    list_ = (
            [-1, 0, 1, 2, 4, 6, 10, 11, 12, 15, 17, 18] |
            pipe.filter(lambda a: a > 10) |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [11, 12, 15, 17, 18]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4、groupby()分组运算

    创建一个包含属性姓名、年龄、班级的list列表,然后可以按照某一个属性对其完成分组。

    list_ = (
            [
                {
                    '姓名': 'Pytonh',
                    '年龄': '19',
                    '班级': '1710'
                },
                {
                    '姓名': 'Pytonh',
                    '年龄': '20',
                    '班级': '1810'
                }
            ] |
            pipe.groupby(lambda item: item['姓名']) |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [('Pytonh', )]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    这时,虽然返回了分组的结果,但是没有对其进行运算,此时可以搭配下面的select()函数完成运算。

    5、select()遍历结果集

    使用上一步中分组出来的数据结果,使用select函数参与运算计算出姓名为’Python 集中营’的结果有多少。

    list_ = (
            [
                {
                    '姓名': 'Pytonh ',
                    '年龄': '19',
                    '班级': '1710'
                },
                {
                    '姓名': 'Pytonh ',
                    '年龄': '20',
                    '班级': '1810'
                }
            ] |
            pipe.groupby(lambda item: item['姓名']) |
            pipe.select(lambda groups: {groups[0]: len(list(groups[1]))}) |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [{'Pytonh ': 2}]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    6、sort()数据排序

    sort函数的排序使用相对于分组来说就更简单了,同样创建一组列表数据来展示效果。

    list_ = (
            [-1, 2, 5, 7, 9] |
            pipe.sort(reverse=True) |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [9, 7, 5, 2, -1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    sort函数的reverse属性设置为True的时候为降序排序,设置为False时则为升序排序。

    list_ = (
            [-1, 2, 5, 7, 9] |
            pipe.sort(reverse=False) |
            pipe.Pipe(list)
    )
    
    pprint(list_)
    
    # [-1, 2, 5, 7, 9]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    如何使用Docker安装最新版本的Redis并设置远程访问(含免费可视化工具)
    webpack5 Css 兼容性处理postcss-loader
    ctfshow web入门 SQl注入 web185--web190
    Java多线程下——各类锁的详解
    发送 Splunk UBA 的anomalies and threats to Splunk ES
    Java中的设计模式:工厂模式
    C++ 代码覆盖率分析工具
    Pytorch CIFAR10图像分类 MobileNetv2篇
    警钟:SBP持有的MogaFX外汇储备暴跌9.56亿美元,达到79.6亿美元
    spring-data-redis操作redis集群出现的错误
  • 原文地址:https://blog.csdn.net/qq_34160248/article/details/127949580