2016-07-06 114 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'。我将我的代码添加到问题中 –