如何使用 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 对象并丢弃旧的)。
我正在尝试使用 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 对象,因此您不必一次读取 csv 文件的全部内容(某些文件的大小可能为千兆字节),因此,它在读取 chunks.
中的内容时保持文件打开当它完成读取时,它关闭文档并且变量 df_test
现在指向文件的末尾,而不是开头,所以没有什么可以迭代的,你必须 pd.read_csv()
再次为了 "reset" 这个指向文件开头的指针(它实际上会创建另一个 TextFileReader 对象并丢弃旧的)。