Tengo una lista de marcos de datos de Pandas que me gustaría combinar en un marco de datos de Pandas. Estoy usando Python 2.7.10 y Pandas 0.16.2
Creé la lista de marcos de datos de:
import pandas as pd
dfs = []
sqlall = "select * from mytable"
for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
dfs.append(chunk)
Esto devuelve una lista de marcos de datos
type(dfs[0])
Out[6]: pandas.core.frame.DataFrame
type(dfs)
Out[7]: list
len(dfs)
Out[8]: 408
Aquí hay algunos datos de muestra
# 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]
Me gustaría combinar d1
, d2
y d3
en una trama de datos pandas. Alternativamente, un método para leer una tabla de gran tamaño directamente en un marco de datos cuando se usa la chunksize
opción sería muy útil.
data.frame
no tienen las mismas columnasNaN
, se insertarán sin arrojar un error en la nueva versión depandas
Si los marcos de datos NO tienen todas las mismas columnas, intente lo siguiente:
fuente
TypeError: data argument can't be an iterator
. La conversión alist
primera (para imitar Python 2.7) también produce resultados inesperados.También puedes hacerlo con programación funcional:
fuente
from functools import reduce
usarreduce
pd.concat
ojoin
, ambos aceptan una lista de marcos y se unen en el índice de forma predeterminada.concat
también funciona bien con una comprensión de lista extraída usando el comando "loc" contra un marco de datos existentefuente