2016-07-06 267 views
0

我有一個很大的df,並用'chunksize'來分割它。 之後,我使用循環經過df和下一個循環的間隔來做一些條件,然後我想合併所有這個df。我嘗試'concat(df)',但它返回錯誤。方法'加入'是不方便的,因爲我有400 df。 我該如何連接這個? 此代碼用大熊貓合併很多df

el = pd.read_csv('df2.csv', iterator=True, chunksize=100000) 
buys = pd.read_excel('smartphone.xlsx') 
buys['date'] = pd.to_datetime(buys['date']) 
dates1 = buys['date'] 
ids1 = buys['id'] 
for i in el: 
i['used_at'] = pd.to_datetime(i['used_at']) 
df = i.sort_values(['ID', 'used_at']) 
dates = df['used_at'] 
ids = df['ID'] 
urls = df['url'] 
for i, (id, date, url, id1, date1) in enumerate(zip(ids, dates, urls, ids1, dates1)): 
    df1 = df[(df['ID'] == ids1[i]) & (df['used_at'] < (dates1[i] + dateutil.relativedelta.relativedelta(days=5)).replace(hour=0, minute=0, second=0)) & (df['used_at'] > (dates1[i] - dateutil.relativedelta.relativedelta(months=1)).replace(day=1, hour=0, minute=0, second=0))] 
    df1 = DataFrame(df1) 
    if df1.empty: 
     continue 
    else: 
     df_upd = concat(df1, ignore_index=True) 
     book = load_workbook('report_buy2.xlsx') 
     writer = pd.ExcelWriter('report_buy2.xlsx', engine='openpyxl') 
     writer.book = book 
     writer.sheets = dict((ws.title, ws) for ws in book.worksheets) 
     df_upd.to_excel(writer, "Main") 

     writer.save() 
+3

請出示你嘗試了一些代碼,併發布完整的錯誤消息。 – Jeff

+0

@JeffL。添加代碼 –

回答

0

大熊貓v0.18.1文檔Merge, join, and concatenate狀態dataframes作爲參數/參數的concat函數作爲樣本的列表:

import pandas as pd 
# ... generate df1 et al. 
frames = [df1, df2, df3] 
result = pd.concat(frames) 

在前導它指出「concat函數(在主熊貓命名空間中)完成了沿着一個軸執行連接操作的所有繁重工作,同時在其他軸上執行了索引(如果有的話)的可選集邏輯(聯合或相交)。請注意,我說「如果有」是因爲Series中只有一個可能的串聯軸。「

因此,在你的情況下,也應該將數據幀的df塊收集在一個容器中,然後將該容器(以上命名爲frames)賦予concat函數以返回連接了所有塊的新數據幀。

如果此功能也接受一般iterables可能擡頭那裏......

+0

問題,我轉換一個'df'。我將我的代碼添加到問題中 –