Pandas块大小i

2024-04-16 16:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个1GB,70M的行文件,每当我加载它时,它就会耗尽内存。我已经阅读了1000行,并能够原型我想它做什么。在

我的问题是不知道如何获取接下来的1000行并应用我的逻辑,然后继续运行我的文件,直到它完成最后一行。虽然我不知道如何继续块大小调整的迭代,但我已经读过关于块大小调整的文章。在

理想情况下,它会这样流动:

1)读取前1000行 2) 根据条件筛选数据 3) 写入csv 4) 不要再重复行

以下是我目前所掌握的情况:

import pandas as pd
data=pd.read_table('datafile.txt',sep='\t',chunksize=1000, iterator=True)
data=data[data['visits']>10]
with open('data.csv', 'a') as f:
    data.to_csv(f,sep = ',', index=False, header=False)

Tags: 文件csv数据内存falsedataas文章
2条回答

你的逻辑有些问题,我们想循环数据中的每个块,而不是数据本身。在

“chunksize”参数为我们提供了一个“textreader对象”,我们可以对其进行迭代。在

import pandas as pd
data=pd.read_table('datafile.txt',sep='\t',chunksize=1000)

for chunk in data:
    chunk = chunk[chunk['visits']>10]
    chunk.to_csv('data.csv', index = False, header = False)

你需要考虑如何处理你的头!在

当您传递chunksizeiterator=True时,pd.read_table将返回一个TextFileReader,您可以对其进行迭代或调用get_chunk。所以您需要在data上迭代或调用get_chunk。在

所以对整个文件的正确处理可能看起来像

import pandas as pd

data = pd.read_table('datafile.txt',sep='\t',chunksize=1000, iterator=True)

with open('data.csv', 'a') as f:
    for chunk in data:
        chunk[chunk.visits > 10].to_csv(f, sep=',', index=False, header=False)

相关问题 更多 >