我正在尝试使用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文件的全部内容(某些文件的大小可能是千兆字节),因此,它在读取内容时会保持打开状态在块中。
[读取完成后,它关闭了文档,并且变量df_test
现在指向文件的末尾,而不是文件的开头,因此没有其他要遍历的内容,您必须再次单击pd.read_csv()
才能“重置“该指针指向文件的开头(它实际上将创建另一个TextFileReader对象,并丢弃旧的对象)。