Kouknul buych se při tom na https://docs.dask.org/en/latest/dataframe.html
Ocenil bych nějaký srovnání. Díky
Taková zajímavost je, že autor pandasu pracuje na Arrow:
https://wesmckinney.com/blog/apache-arrow-pandas-internals/
27. 11. 2020, 13:39 editováno autorem komentáře
Pokud se tyka zpracovani velkych objemu dat, tak Pandas ma stale znacne problemy (pomaly, velke naroky na pamet, diskutabilni paralelizace).
V pripade velkych dat je lepsi pouzivat Dask (https://dask.org/), ktery Pandas "emuluje" a ma mnohem lepsi vykonove charakteristiky.
27. 11. 2020, 09:21 editováno autorem komentáře
Díky za další článek/seriál na přínosné téma.
I ze strany PyLadies je o Pandas a zpracování dat tabulkového typu, zájem.
Chystám se Pandasu pořádně podívat na zoubek už léta, možná bude tenhle seriál tou správnou rozbuškou.
V roce 2005 jsem rozjížděl projekt, při kterém by se mi Pandas velmi hodil, ale to ještě neexistoval a i s dalšími nástroji byl problém. Třeba csv reader neuměl UTF-8.
Takže jsem si na to udělal vlastní knihovny a pak, když už se začal prosazovat Pandas, tak jsem neměl motivaci ho používat.
V tom projektu se zpracovávají velké soubory z mnoha datových zdrojů (t/csv, xls různých/hrůzných formátů, dbf, fpt a pod...) a to data místy pěkně nečistá, například soubory uložené ve více znakových sadách spojené do jednoho souboru, BOM/neBOM, soubory s formátovacími znaky uvnitř dat...
Co mě zajímalo a v článku jsem to nenašel, jak Pandasu říc, aby načítal do jednoho data frame data z několika souborů (např. data_part1.csv, data_part2.csv), nebo několika listů v souborech z tabulkových kalkulátorů.
Že by to mělo jít jsem dohledal např v:
https://pbpython.com/pandas-excel-tabs.html
https://medium.com/@kadek/elegantly-reading-multiple-csvs-into-pandas-e1a76843b688
V mém případě je občas nutné "sáhnout" do těch datových souborů a nahradit problematické řetězce, což řeším voláním sedu, kterého z pythonu krmím parametry.
Někdy nastupuje heuristika, která na požádání hlídá počty sloupců, prázdné hodnoty, korelaci hodnot ve více sloupcích, unikátnost položek,... a na základě výsledků z heuristiky je buď datový zdroj hlasitě odmítnut, nebo je po řadě úprav zkonvertován do použitelnějšího stavu a pak importován.
Volitelně se pak vytváří soubory s odmítnutými záznamy a důvodem odmítnutí konkrétních řádků, které se posílají na ruční kontrolu/doplnění.
Složitější úpravy vstupních dat už hádám Pandas neumí?
Díky za tip. Neznal jsem ho, páč jsem zvyklý na ten sed, tak jsem po tom nepátral, ale je dobré o něm vědět, může se hodit.
Zkusil jsem ho a musí se s ním opatrně.
Vyzkoušel jsem inplace=True na 1,5GB souboru ve kterém bylo trochu bordýlku.
Zahlásilo to UnicodeDecodeError a soubor měl rázem téměř nulovou velikost.
Encoding to asi neumí a nejde to použít dohromady s openhookem.
I když jsem dal ze zvědavosti mode="r" (nebo deprecated mode="U") tak to při chybě soubor vynulovalo.
Alespoň ta vynulovaná data nezůstala viset ve vzduchoprázdnu a filesystem je uvolnil. Kontroloval jsem pomocí df před a po.
Při mode="rb" to vtipně zahlásí, TypeError, že očekává "str" a ne bytes-like obejct. a soubor stejně vynuluje.
Pozitivní je, že s cca 50MB souborem, který jsem prohnal iconven a zbavil ho unicode pracoval fileinput cca stejně rychle jako sed.
BTW: iconv ten soubor očisti od unicode za osminu času.
S pandas jsem se poprvé setkal cca před rokem, kdy jsem potřeboval zpracovat velké mnoho-listové xlsx soubory. Původně jsem myslel, že je jen načtu a zbytek logiky budu muset dopsat, jaké milé překvapení bylo, že spoustu operací lze napsat "na jeden řádek". Od té doby jsou pandy jedna z oblíbených knihoven. Takže těším se na tuhle část seriálu (o Excelu a o numpy), určitě se bude čemu přiučit.
Pekne. Jeden namet ode me :
- vyjasnit situaci okolo view vs. copy dataframu pri operacich nad DF.
Jupyter casto vypisuje ruzove hlasky informujici o dvojznacne situaci nebo nevhodnem pristupu. (To, ze clovek obcas navic pouzije nejake deprecated funkce tomu take nepomaha. ) A v pripade velkych objemu si clovek treba nemuze ani kopii dataframu dovolit....
Tak diky.