Co je v CSV a co je v datovém rámci, jsou dvě velmi odlišné věci. Například 9.9
a 9.99999999999999
v CSV zabere stejné množství místa v datovém rámci.
To znamená, že data v datovém rámci zabírají mnohem méně místa než data v seznamu. Sestavení seznamu je nákladné na paměť; a připojení k datovému rámci vyžaduje, aby pandy vytvořily nový (větší) datový rámec, vše zkopírovaly a poté ponechaly původní datový rámec, aby se shromáždil odpad.
Pravděpodobně byste udělali mnohem lépe, kdybyste předem alokovali datový rámec 60 000 řádků (nebo kolik řádků máte celkem); např.:
data = pd.DataFrame(np.empty((60000,), dtype=[
('x', np.uint8),
('y', np.float64)
]))
a poté pro každý řádek vložil data pro tento řádek, aniž by se spoléhal na dataset
seznam:
data.values[count,:] = rowdata_at_count
Toto není typově bezpečné, ale je to docela rychlé (protože nedochází k žádným alokacím), takže se ujistěte, že rowdata_at_count
je seznam, jehož prvky odpovídají typům sloupců.
UPRAVIT
Ano, připojení 100 řádků je, věřím, jako 100 concats jednoho řádku (protože každé připojení musí přerozdělit a zkopírovat tabulku, stejně jako concat). Předběžná alokace se vyhýbá jak připojování, tak spojování:velikost tabulky se nemění, není třeba provádět žádné přerozdělení a kopírování.