2015-09-07 42 views
30

Tôi có một danh sách các khung dữ liệu Pandas mà tôi muốn kết hợp thành một khung dữ liệu Pandas. Tôi đang sử dụng Python 2.7.10 và Pandas 0.16.2Kết hợp danh sách các khung dữ liệu gấu trúc vào một khung dữ liệu gấu trúc

tôi tạo danh sách các dataframes từ:

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

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

này trả về một danh sách các dataframes

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

type(dfs) 
Out[7]: list 

len(dfs) 
Out[8]: 408 

Dưới đây là một số dữ liệu mẫu

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

Tôi muốn kết hợp d1, d2d3 vào một khung dữ liệu gấu trúc. Ngoài ra, một phương pháp đọc một bảng lớn ish trực tiếp vào một khung dữ liệu khi sử dụng tùy chọn chunksize sẽ rất hữu ích.

Trả lời

57

Cho rằng tất cả các dataframes có các cột tương tự, bạn có thể chỉ đơn giản là concat họ:

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

nếu chúng không có cùng cột bạn có thể truyền chúng trước tiên, hãy sử dụng from_dict - xem bên dưới – meyerson

+0

nếu bạn muốn thêm cột nhớ thêm đối số trục = 1 –

+0

Tôi đoán, ngay cả khi một số 'data.frame' không có cùng cột thì' NaN' sẽ được chèn vào mà không ném lỗi trong phiên bản mới của 'pandas' –

4

Nếu dataframes KHÔNG đều có các cột tương tự hãy thử như sau:

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

Bạn cũng có có thể làm điều đó với lập trình chức năng:

reduce(lambda df1, df2: df1.merge(df2, "outer"), mydfs) 
Các vấn đề liên quan