2016-09-16 195 views
2

我有一个大的数据框,我试图在concat之后分割它。 我用TypeError:第一个参数必须是pandas对象的迭代,你传递了一个类型为“DataFrame”的对象

df2 = pd.read_csv('et_users.csv', header=None, names=names2, chunksize=100000) 
for chunk in df2: 
    chunk['ID'] = chunk.ID.map(rep.set_index('member_id')['panel_mm_id']) 

df2 = pd.concat(chunk, ignore_index=True) 

但它返回一个错误

TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame" 

我该如何解决呢?

+0

错误很明显,但即使您确实传递了一个数据框列表,您将覆盖循环中的ID列:'对于df2中的块: chunk ['ID'] = chunk.ID.map(rep.set_index ('member_id')['panel_mm_id'])'这里你的意图是什么?你想创建一些新的DF?你应该做的是将每个块添加到某个列表中,然后调用'concat'对其进行调用 – EdChum

+0

@EdChum我试图从'chunk ['ID]'中替换其他df中的值。接下来我应该使用'chunk = chunk.dropna()',然后我应该连接只在列表中需要的块 –

回答

1

IIUC你想以下几点:

df2 = pd.read_csv('et_users.csv', header=None, names=names2, chunksize=100000) 
chunks=[] 
for chunk in df2: 
    chunk['ID'] = chunk.ID.map(rep.set_index('member_id')['panel_mm_id']) 
    chunks.append(chunk) 

df2 = pd.concat(chunks, ignore_index=True) 

,需要在每个块添加到列表中,然后使用concat来连接所有这些,也是我认为ignore_index可能不是必要的,但我可能是错

+0

?就这样?我认为这个问题是另一回事。谢谢!)但之后,我又遇到了另一个问题:'pandas.io.common.CParserError:标记数据出错。 C错误:内存不足。 chunksize没有帮助。有什么办法解决这个问题? –

+0

如果我的答案解决了你的问题,那么你可以接受它,当我的答案 – EdChum

+0

肯定会在左上角有一个空的刻度标记!)但之后,我得到了另一个问题:pandas.io.common.CParserError:错误标记数据。 C错误:内存不足。 chunksize没有帮助。有什么办法解决这个问题? –

相关问题