Próbuję połączyć dwie ramki danych w pandy, używając read_csv. Ale jedna z moich ramek danych (w tym przykładzie d1
) jest zbyt duża, aby mój komputer mógł nią obsłużyć, więc używam argumentu iterator
w read_csv
.Scalanie ramek danych iteracyjnie z pandami
Powiedzmy mam dwie dataframes
d1 = pd.DataFrame({
"col1":[1,2,3,4,5,6,7,8,9],
"col2": [5,4,3,2,5,43,2,5,6],
"col3": [10,10,10,10,10,4,10,10,10]},
index=["paul", "peter", "lauren", "dave", "bill", "steve", "old-man", "bob", "tim"])
d2 = pd.DataFrame({
"yes/no": [1,0,1,0,1,1,1,0,0]},
index=["paul", "peter", "lauren", "dave", "bill", "steve", "old-man", "bob", "tim"])
muszę połączyć je tak, że każdy wiersz przechwytuje wszystkie dane dla każdej osoby, więc równowartość robi:
pd.concat((d1,d2), axis=1,join="outer")
ale skoro mogę dopasowuję d1 do pamięci, używam read_csv
(używam read_csv
ponieważ już przetworzyłem ogromny plik i zapisałem go do formatu .csv, więc wyobraź sobie, że moja ramka danych d1 zawarta jest w pliku test.csv
).
itera = pd.read_csv("test.csv",index_col="index",iterator=True,chunksize=2)
Ale kiedy zrobić
for i in itera:
d2 = pd.concat((d2,i), axis=1,join="outer")
moje wyjście jest pierwszym dataframe dołączone przez drugi dataframe.
moje wyjście wygląda następująco:
col1 col2 col3 yes/no
one NaN NaN NaN 1.0
two NaN NaN NaN 0.0
three NaN NaN NaN 1.0
four NaN NaN NaN 0.0
five NaN NaN NaN 1.0
six NaN NaN NaN 1.0
seven NaN NaN NaN 1.0
eight NaN NaN NaN 0.0
nine NaN NaN NaN 0.0
one 1.0 5.0 10.0 NaN
two 2.0 4.0 10.0 NaN
three 3.0 3.0 10.0 NaN
four 4.0 2.0 10.0 NaN
five 5.0 5.0 10.0 NaN
six 6.0 43.0 4.0 NaN
seven 7.0 2.0 10.0 NaN
eight 8.0 5.0 10.0 NaN
nine 9.0 6.0 10.0 NaN
nadzieję, że moje pytanie ma sens :)
Szybka odpowiedź: spróbuj użyć biblioteki dask, może obsługiwać duże dataframes który nie zmieści się w pamięci: http://dask.pydata.org/pl/latest/ – CrazyElf
* moje wyjście jest pierwszą ramką danych dołączoną przez drugą ramkę danych * ... czego chcesz? – Parfait
Wypróbuj zagnieżdżoną konkatencję: 'pd.concat ([d1, pd.concat (itera, ignore_index = True)])' – Parfait