Mam listę ramek danych Pandas, które chciałbym połączyć w jedną ramkę danych Pandas. Używam Pythona 2.7.10 i Pandas 0.16.2
Utworzyłem listę ramek danych z:
import pandas as pd
dfs = []
sqlall = "select * from mytable"
for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
dfs.append(chunk)
Zwraca listę ramek danych
type(dfs[0])
Out[6]: pandas.core.frame.DataFrame
type(dfs)
Out[7]: list
len(dfs)
Out[8]: 408
Oto kilka przykładowych danych
# sample dataframes
d1 = pd.DataFrame({'one' : [1., 2., 3., 4.], 'two' : [4., 3., 2., 1.]})
d2 = pd.DataFrame({'one' : [5., 6., 7., 8.], 'two' : [9., 10., 11., 12.]})
d3 = pd.DataFrame({'one' : [15., 16., 17., 18.], 'two' : [19., 10., 11., 12.]})
# list of dataframes
mydfs = [d1, d2, d3]
Chciałbym połączyć d1
, d2
i d3
do jednej pandy dataframe. Alternatywnie, chunksize
bardzo pomocna byłaby metoda wczytywania dużej tabeli bezpośrednio do ramki danych podczas korzystania z tej opcji.
data.frame
nie mają tych samych kolumn toNaN
zostaną wstawione bez wyrzucania błędu w nowej wersjipandas
Jeśli ramki danych NIE mają wszystkich tych samych kolumn, spróbuj wykonać następujące czynności:
źródło
TypeError: data argument can't be an iterator
. Konwersja dolist
first (naśladująca Python 2.7) również daje nieoczekiwane rezultaty.Możesz to również zrobić za pomocą programowania funkcjonalnego:
źródło
from functools import reduce
do użyciareduce
pd.concat
lubjoin
, obie domyślnie akceptują listę ramek i dołączają do indeksu.concat
działa również dobrze z listą złożoną pobraną za pomocą polecenia „loc” w odniesieniu do istniejącej ramki danychźródło