Pandas 的性能问题 - V2EX
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
shuangchengsun
V2EX    Python

Pandas 的性能问题

  •  1
     
  •   shuangchengsun 2021-01-08 18:30:55 +08:00 5140 次点击
    这是一个创建于 1744 天前的主题,其中的信息可能已经有所发展或是发生改变。
    DataFrame 的 append 操作每次都会返回一个全新的对象,势必会有大量的内存拷贝,这样岂不是会严重拉胯新能,还是说有新的姿势构造 DataFrame 。小白跪求大佬赐教。
    22 条回复    2021-01-10 10:45:44 +08:00
    lewinlan
        1
    lewinlan  
       2021-01-08 18:46:46 +08:00 via Android
    我记得有一个参数,可以指定原地操作。
    wuwukai007
        2
    wuwukai007  
       2021-01-08 19:18:24 +08:00 via Android
    concat
    bilibilifi
        3
    bilibilifi  
       2021-01-08 19:25:11 +08:00 via iPhone
    list 里搞好了再转?我记得 dataframe 为了优化性能会把数据放在连续的内存里
    nthhdy
        4
    nthhdy  
       2021-01-08 22:04:33 +8:00
    我不了解啊,瞎说的。但我感觉它不会拷贝内存的,有可能是写时复制的。可以读下源码看看。
    crystom
        5
    crystom  
       2021-01-08 22:10:02 +08:00
    懒操作吧
    allAboutDbmss
        6
    allAboutDbmss  
       2021-01-08 22:18:30 +08:00
    milkpuff
        7
    milkpuff  
       2021-01-09 02:02:19 +08:00
    pandas 直接操作非常慢,一般拼接都 append 到 list 里面,最后一次性 concat 。
    pandas 索引、切片、拼接、赋值等都不适合频繁调用,转换成 numpy 效率可以极大提升
    Rorysky
        8
    Rorysky  
       2021-01-09 02:07:44 +08:00
    猛男都直接用原生数据类型
    qile1
        9
    qile1  
       2021-01-09 03:01:39 +08:00 via Android
    @milkpuff 多谢回复,我都是 for 遍历逐行附值到 pandas 里面,后期得修改下
    lixuda
        10
    lixuda  
       2021-01-09 07:58:17 +08:00
    @qile1 apply 方式
    myCupOfTea
        11
    myCupOfTea  
       2021-01-09 08:46:55 +08:00
    数据量太大确实会有性能问题啊
    底层是 numpy 吧,numpy concat 数据量大的阵列确实会很慢
    lithiumii
        12
    lithiumii  
       2021-01-09 09:50:21 +08:00 via Android
    append 确实慢
    如果是一堆小 df 建议 concat 一个 list
    如果是一行一行的可以每行先存成一个 dict 然后 append 到 list 里,最后转成 df
    shuangchengsun
        13
    shuangchengsun  
    OP
       2021-01-09 10:40:49 +08:00
    @bilibilifi 我现在的数据阵列是 rows 是一亿五千万左右,columns 是 12,有点太庞大了,用 list 的话能撑住么?
    shuangchengsun
        14
    shuangchengsun  
    OP
       2021-01-09 10:41:19 +08:00
    @allAboutDbmss 谢谢推荐,我去看看这个工具
    shuangchengsun
        15
    shuangchengsun  
    OP
       2021-01-09 10:43:19 +08:00
    @myCupOfTea 数据量确实很大,rows 差不多一亿五千万的样子。
    shuangchengsun
        16
    shuangchengsun  
    OP
       2021-01-09 10:43:44 +08:00
    @lithiumii 感谢指导,我这就去试试。
    outoftimeerror
        17
    outoftimeerror  
       2021-01-09 14:18:56 +08:00
    用 spark dataframe
    volvo007
        18
    volvo007  
       2021-01-09 16:14:24 +08:00
    @shuangchengsun list 存的是对象指针,不是实际的对象……

    对于这个体量的数据,可以考虑用 vaex 这个库

    如果上下文操作不复杂且需要持久化的话,强烈安利 PostgreSQL 数据库来处理,超好用,真香
    weeevv
        19
    weeevv  
       2021-01-09 16:20:41 +08:00
    Dask 或者直接上数据库吧。
    dlsflh
        20
    dlsflh  
       2021-01-09 16:54:57 +08:00 via Android
    试试看并行的 pandas modin ?
    ElliotQi
        21
    ElliotQi  
       2021-01-09 19:34:13 +08:00
    shuangchengsun
        22
    shuangchengsun  
    OP
       2021-01-10 10:45:44 +08:00
    @volvo007 感谢指导
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2495 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:46 PVG 18:46 LAX 03:46 JFK 06:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86