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.