Ich habe eine Liste von Pandas-Datenrahmen, die ich zu einem Pandas-Datenrahmen kombinieren möchte. Ich benutze Python 2.7.10 und Pandas 0.16.2
Ich habe die Liste der Datenrahmen erstellt aus:
import pandas as pd
dfs = []
sqlall = "select * from mytable"
for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
dfs.append(chunk)
Dies gibt eine Liste von Datenrahmen zurück
type(dfs[0])
Out[6]: pandas.core.frame.DataFrame
type(dfs)
Out[7]: list
len(dfs)
Out[8]: 408
Hier sind einige Beispieldaten
# 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]
Ich möchte kombinieren d1
, d2
und d3
in einen Pandas Datenrahmen. Alternativ wäre eine Methode zum Einlesen einer großen Tabelle direkt in einen Datenrahmen bei Verwendung der chunksize
Option sehr hilfreich.
data.frame
nicht die gleichen Spalten haben,NaN
werden sie ohne Fehler in die neue Version vonpandas
Wenn die Datenrahmen NICHT alle dieselben Spalten haben, versuchen Sie Folgendes:
quelle
TypeError: data argument can't be an iterator
. Die Konvertierung inlist
first (um Python 2.7 nachzuahmen) führt ebenfalls zu unerwarteten Ergebnissen.Sie können dies auch mit funktionaler Programmierung tun:
quelle
from functools import reduce
zu verwendenreduce
pd.concat
oderjoin
, beide akzeptieren eine Liste von Frames und verbinden sich standardmäßig mit dem Index.concat
funktioniert auch gut mit einem Listenverständnis, das mit dem Befehl "loc" für einen vorhandenen Datenrahmen abgerufen wirdquelle