To, co znajduje się w pliku CSV, a co w ramce danych, to dwie bardzo różne rzeczy. Na przykład 9.9
i 9.99999999999999
w pliku CSV zajmie taką samą ilość miejsca w ramce danych.
To powiedziawszy, dane w ramce danych zajmują znacznie mniej miejsca niż dane na liście. Konstruowanie listy jest kosztowne w pamięci; a dołączenie do ramki danych wymaga od pand utworzenia nowej (większej) ramki danych, skopiowania wszystkiego, a następnie pozostawienia oryginalnej ramki danych do wyczyszczenia.
Prawdopodobnie zrobiłbyś znacznie lepiej, gdybyś wstępnie przydzielił ramkę danych zawierającą 60000 wierszy (lub tyle, ile masz łącznie); np.:
data = pd.DataFrame(np.empty((60000,), dtype=[
('x', np.uint8),
('y', np.float64)
]))
a następnie dla każdego wiersza wstawiono dane dla tego wiersza, bez polegania na dataset
lista:
data.values[count,:] = rowdata_at_count
Nie jest to bezpieczne dla typu, ale jest dość szybkie (ponieważ nie występują alokacje), więc upewnij się, że rowdata_at_count
to lista, której elementy odpowiadają typom kolumn.
EDYTUJ
Tak, dołączenie 100 linii jest, jak sądzę, jak 100 concats jednej linii (ponieważ każdy append musi ponownie przydzielić i skopiować tabelę, tak jak concat). Wstępne przydzielanie pozwala uniknąć zarówno dołączania, jak i łączenia:rozmiar tabeli się nie zmienia, nie trzeba wykonywać ponownego przydzielania ani kopiowania.