J'ai une liste de dataframes Pandas que je voudrais combiner en une dataframe Pandas. J'utilise Python 2.7.10 et Pandas 0.16.2
J'ai créé la liste des dataframes à partir de:
import pandas as pd
dfs = []
sqlall = "select * from mytable"
for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
dfs.append(chunk)
Cela renvoie une liste de dataframes
type(dfs[0])
Out[6]: pandas.core.frame.DataFrame
type(dfs)
Out[7]: list
len(dfs)
Out[8]: 408
Voici quelques exemples de données
# 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]
Je voudrais combiner d1
, d2
et d3
en un seul dataframe pandas géants. Sinon, une méthode de lecture d'une table volumineuse directement dans une trame de données lors de l'utilisation de l' chunksize
option serait très utile.
data.frame
n'ont pas les mêmes colonnes, ilsNaN
seront insérés sans erreur dans la nouvelle version depandas
Si les dataframes n'ont PAS toutes les mêmes colonnes, essayez ce qui suit:
la source
TypeError: data argument can't be an iterator
. La conversion enlist
premier (pour imiter Python 2.7) donne également des résultats inattendus.Vous pouvez également le faire avec la programmation fonctionnelle:
la source
from functools import reduce
à utiliserreduce
pd.concat
oujoin
, les deux acceptent une liste de cadres et se rejoignent sur l'index par défaut.concat
fonctionne également très bien avec une compréhension de liste tirée à l'aide de la commande "loc" sur un dataframe existantla source