如何使用 Python/Pandas 将聚合块附加到列表?

How to append aggregated chunks to list using Python/Pandas?

我正在尝试使用 pandas 以块的形式读取大型数据集,聚合行,将聚合的块附加到列表,然后连接列表。 我不明白为什么我的列表是空的

测试数据

"Test 1", 1, 1, 1, 1, 1
"Test 1", 1, 2, 2, 2, 2
"Test 2", 2, 3, 3, 3, 3
"Test 2", 2, 4, 4, 3, 4
"Test 3", 0, 1, 2, 3, 4
"Test 4", 0, 1, 2, 3, 4

代码

### Test 2
cols_to_keep = [0, 1, 2, 3]
df_test = pd.read_csv("test.txt", sep=",", header=None, chunksize=2, usecols=cols_to_keep)
for chunk in df_test:
    print chunk

### Aggregate Chunks
chunk_list = []  # append each chunk df here    

# Each chunk is in df format
for chunk in df_test:
    chunk_agg = chunk.groupby([0,1]).agg('sum')
    chunk_list.append(chunk_agg) # append aggregated chunk to list

df_test_concat = pd.concat(chunk_list)
print(df_test_concat)

正如伯尼在您的问题评论中提到的,您正在使用使用 pd.read_csv().

创建的 TextFileReader 对象的内容

发生这种情况是因为存在 TextFileReader 对象,因此您不必一次读取 csv 文件的全部内容(某些文件的大小可能为千兆字节),因此,它在读取 chunks.

中的内容时保持文件打开

当它完成读取时,它关闭文档并且变量 df_test 现在指向文件的末尾,而不是开头,所以没有什么可以迭代的,你必须 pd.read_csv() 再次为了 "reset" 这个指向文件开头的指针(它实际上会创建另一个 TextFileReader 对象并丢弃旧的)。