2015-09-07 5 views
30

У меня есть список блоков данных Pandas, которые я хотел бы объединить в один фрейм данных Pandas. Я использую Python 2.7.10 и панды 0.16.2Объедините список блоков данных pandas с одним файлом данных pandas

Я создал список dataframes от:

import pandas as pd 
dfs = [] 
sqlall = "select * from mytable" 

for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000): 
    dfs.append(chunk) 

Это возвращает список dataframes

type(dfs[0]) 
Out[6]: pandas.core.frame.DataFrame 

type(dfs) 
Out[7]: list 

len(dfs) 
Out[8]: 408 

Вот некоторые выборочные данные

# 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] 

Я хотел бы комбинировать , d2 , и d3 в один блок данных pandas. В качестве альтернативы, метод чтения таблицы больших чисел непосредственно в фрейм данных при использовании опции chunksize будет очень полезен.

ответ

57

Учитывая, что все dataframes имеют одни и те же столбцы, вы можете просто concat их:

import pandas as pd 
df = pd.concat(list_of_dataframes) 
+0

если у них нет одинаковых столбцов, вы можете их отбросить сначала в dict, а затем используйте from_dict - см. ниже – meyerson

+0

, если вы хотите добавить столбцы, не забудьте добавить аргумент axis = 1 –

+0

Я думаю, даже если некоторые 'data.frame' не имеют одинаковых столбцов, тогда' NaN' будет быть вставлен без ошибки в новой версии 'pandas' –

4

Если dataframes не все имеют одни и те же столбцы, попробуйте следующее:

df = pd.DataFrame.from_dict(map(dict,df_list)) 
1

Вы также может сделать это с функциональным программированием:

reduce(lambda df1, df2: df1.merge(df2, "outer"), mydfs) 
Смежные вопросы