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

问题描述 投票:0回答:1

我正在尝试使用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)
python pandas append chunks
1个回答
0
投票

正如您的问题注释中提到的小熊一样,您正在消费使用pd.read_csv()时创建的TextFileReader对象的内容。

这是因为TextFileReader对象存在,所以您不必一次读取csv文件的全部内容(某些文件的大小可能是千兆字节),因此,它在读取内容时会保持打开状态在中。

[读取完成后,它关闭了文档,并且变量df_test现在指向文件的末尾,而不是文件的开头,因此没有其他要遍历的内容,您必须再次单击pd.read_csv()才能“重置“该指针指向文件的开头(它实际上将创建另一个TextFileReader对象,并丢弃旧的对象)。

© www.soinside.com 2019 - 2024. All rights reserved.