У меня есть список фреймов данных Pandas, которые я хотел бы объединить в один фрейм данных Pandas. Я использую Python 2.7.10 и Pandas 0.16.2
Я создал список фреймов данных из:
import pandas as pd
dfs = []
sqlall = "select * from mytable"
for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
dfs.append(chunk)
Это возвращает список фреймов данных
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]
Я хотел бы объединить d1
, d2
и d3
в один панд dataframe. В качестве альтернативы, метод чтения большой таблицы непосредственно в фрейм данных при использовании этой chunksize
опции был бы очень полезен.
data.frame
нет таких же столбцов,NaN
они будут вставлены без ошибок в новой версииpandas
Если во всех фреймах данных НЕ одинаковые столбцы, попробуйте следующее:
источник
TypeError: data argument can't be an iterator
. Преобразование вlist
первый (имитирующий Python 2.7) также дает неожиданные результаты.Вы также можете сделать это с помощью функционального программирования:
источник
from functools import reduce
использоватьreduce
pd.concat
илиjoin
оба принимают список фреймов и по умолчанию присоединяются к индексу.concat
также хорошо работает с пониманием списка, полученным с помощью команды "loc" против существующего фрейма данныхисточник