2013-06-07 10 views
7

Myślę, że to pytanie wymaga wglądu w implementację konkat.czy Pandy dołączają funkcję lokalną?

Powiedzmy, mam 30 plików po 1G i mogę używać tylko do 32 G pamięci. Załadowałem pliki do listy DataFrames, nazwanej "list_of_pieces". Ta lista_próbek powinna mieć rozmiar ~ 30G, prawda?

jeśli zrobię "pd.concat (list_of_pieces)", czy concat przydzieli kolejne 30G (lub może 10G 15G) w stercie i wykonuje niektóre operacje, czy uruchamia konkatencję "w miejscu" bez przydzielania nowej pamięci?

ktoś to wie?

Dzięki!

+1

Nie * myślę, że ... jest na miejscu ... na bok, nie sądzę, że tak naprawdę chcesz przeczytać tyle w pamięci (nie pozostawisz zbyt wiele miejsca na wykonywanie obliczeń)! Myślę, że [sklep HDF5] (http://pandas.pydata.org/pandas-docs/stable/io.html#hdf5-pytables) to dla ciebie znacznie lepszy wybór. –

+0

@AndyHayden, obawiam się, że potrzebuję tego rozmiaru danych w pamięci, potrzebuję więc trochę interaktywnej analizy na nich :-( –

Odpowiedz

7

Odpowiedź brzmi: nie, to nie jest operacja w miejscu; np.concatenate stosowany jest pod maską, zobacz tutaj: Concatenate Numpy arrays without copying

Lepszym podejściem do problemu jest napisanie każdego z tych elementów do tabeli HDFStore, zobacz tutaj: http://pandas.pydata.org/pandas-docs/dev/io.html#hdf5-pytables w Dokumentach, a tu: http://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstore dla niektórych receptur.

Następnie można wybrać cokolwiek porcje (lub nawet cały zestaw) w zależności od potrzeb (przez zapytania lub nawet rzędzie numer)

Niektóre rodzaje działalności można jeszcze zrobić, gdy dane znajdują się na dysku: https://github.com/pydata/pandas/issues/3202?source=cc i tutaj: http://pytables.github.io/usersguide/libref/expr_class.html#