V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Baboonowen
V2EX  ›  Python

发现一个用 Rust 重写的 Pandas 的替代品,支持 Python

  •  3
     
  •   Baboonowen ·
    reycn · 2023-02-17 21:37:19 +08:00 · 6026 次点击
    这是一个创建于 645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看 V2 好像没有人讨论,就是这个 Polars,库的设计方式就是对标 Pandas 的,API 设计基本相同,稍微改改就能迁移。

    我电脑上同样的任务只需要 20% 的 Pandas 完成时间,有图有真相:

    img

    你们可以自己在自己机器上也跑跑看,这是我的测试代码: https://github.com/reycn/polars-pandas-bench

    28 条回复    2023-03-14 09:42:44 +08:00
    cocomiko
        1
    cocomiko  
       2023-02-17 21:54:22 +08:00
    看起来不错
    ila
        2
    ila  
       2023-02-17 21:56:13 +08:00 via Android
    一直希望出个纯 go 或 rust 的人脸识别库
    psyer
        3
    psyer  
       2023-02-17 22:35:10 +08:00 via Android
    R 语言做这个是专业的
    Baboonowen
        4
    Baboonowen  
    OP
       2023-02-17 22:38:17 +08:00
    @psyer R 我也会,也在磕盐用过,但是好多年没有用过了。
    Baboonowen
        5
    Baboonowen  
    OP
       2023-02-17 22:38:34 +08:00
    @ila 听起来就不错
    jenlors
        6
    jenlors  
       2023-02-17 22:55:49 +08:00
    好东西
    lambdaq
        7
    lambdaq  
       2023-02-17 23:26:20 +08:00
    Rust 有这功夫去把 R 重写了吧。。233
    rocmax
        8
    rocmax  
       2023-02-17 23:48:47 +08:00 via Android
    @ila 我的理解模型使用的时候并不太吃资源吧,跟训练相比。所以应该是用 rust 重写 tensorflow 或者 pytorch ?
    liuxu
        9
    liuxu  
       2023-02-18 00:46:17 +08:00
    正确的 rust 姿势
    qiuyue0
        10
    qiuyue0  
       2023-02-18 02:13:23 +08:00 via Android
    明天试试
    dw2693734d
        11
    dw2693734d  
       2023-02-18 08:35:17 +08:00
    Rust 语法劝退了,还是 go 香
    tanjoe
        12
    tanjoe  
       2023-02-18 08:45:16 +08:00   ❤️ 3
    @rocmax tensorflow 和 pytorch 的底层是 C++实现的,python 只是作为 binding ,改成 rust 对性能估计没啥提升
    nizoukai
        13
    nizoukai  
       2023-02-18 09:45:13 +08:00 via Android
    这种东西,更需要的是准确性吧,速度无所谓的,没有社区深度验证过的不敢用
    shinession
        14
    shinession  
       2023-02-18 10:03:50 +08:00
    感谢 OP 分享,第一次听说 Polars, pandas 天天用, 回头测试一下看如何
    yuhangch
        15
    yuhangch  
       2023-02-18 10:17:43 +08:00
    可以再来个,实现相关功能所需的时间🐶
    mepwang
        16
    mepwang  
       2023-02-18 11:44:42 +08:00   ❤️ 3
    polar 使用了 apache arrow 格式进行内存数据组织,凡是使用这个思路的软件都快
    这里
    https://h2oai.github.io/db-benchmark/
    有个十多个类似 pandas 软件的详细 benchmark ,可以看看哪几个速度快
    mepwang
        17
    mepwang  
       2023-02-18 11:55:25 +08:00
    类似 pandas 的软件,表格数据在内存中都是按照行来保存,
    但很多数据的存取是按列进行的,
    apache arrow 的基本思路就是按列来组织数据,同一列的数据在内存中相邻存放,
    因此在按列存取数据进行运算的时候速度会快很多
    FightPig
        18
    FightPig  
       2023-02-18 12:22:04 +08:00
    晚点试下
    panggmai
        19
    panggmai  
       2023-02-18 12:32:23 +08:00   ❤️ 1
    很早就发现这个库了,当初尝试过,具体问题是在读取大数据(csv 格式约 10G),有时会出现一些错误,尤其是 某列是某些混合类型的,比如中间有 int,str,还有时间的,pandas 会直接识别成 object ,polars 会报错,指定类型时候没有找到怎么去写的
    NoOneNoBody
        20
    NoOneNoBody  
       2023-02-18 12:56:32 +08:00
    @nizoukai #13
    看谁用吧,速度也很重要的,开始到收市只有只有四小时,自动操盘的计算时间极短

    @panggmai #19
    混合类型其实不止这个库,很多并发的库也处理不好
    例如 np.nan 是浮点型,但很多时候其他类型需要表示“无”也会用到,批量计算尤其涉及相互比较的移动计算 /groupby 等就很麻烦
    justou
        21
    justou  
       2023-02-18 13:31:16 +08:00
    @mepwang 让我想起了我的入门语言 Fortran ,数组在内存中列连续。出了学校再也没用过了,现在语言内置的并行计算功能越来越完善了
    https://coarrays.sourceforge.io/doc.html
    https://github.com/tkoenig1/coarray-tutorial/blob/main/tutorial.md
    MonTubasa
        22
    MonTubasa  
       2023-02-18 13:49:54 +08:00   ❤️ 1
    我现在公司项目就在用,还挺好用的,就是有问题经常搜不到答案,需要自己读源码。
    NoOneNoBody
        23
    NoOneNoBody  
       2023-02-18 15:47:58 +08:00
    粗看了一下文档,似乎学习成本不低,方法虽然接近,但不少参数区别较大,熟悉了 pandas 的人脑子转弯不容易,不熟悉 pandas 的从 0 开始反而可能好一些

    文档前面几页就没找到和 pandas 直接互换的方法,只有新建或者文档读取
    sadhen
        24
    sadhen  
       2023-02-18 22:35:29 +08:00
    这个项目很赞的。
    ohayoo
        25
    ohayoo  
       2023-02-20 09:06:40 +08:00
    @panggmai 大佬,pandas 读大文件,为了内存友好,可以设置 chunksize 来分块读取,再 for 循环;请问下 polars 读大文件是怎么分块读取的? n_rows 参数吗? n_rows 参数我试过,列数一多就容易出问题,得自己写循环来弄,感觉不是特别理想的方式
    han777
        26
    han777  
       2023-02-20 09:42:51 +08:00
    @rocmax Bagua, 一个 rust 写的 PyTorch 的深度训练加速框架
    aa2893785
        27
    aa2893785  
       2023-02-21 14:44:02 +08:00
    @MonTubasa 是 python 在用还是 rust 在用
    NoAnyLove
        28
    NoAnyLove  
       2023-03-14 09:42:44 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:01 · PVG 03:01 · LAX 11:01 · JFK 14:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.