gpt4 book ai didi

Python/ Pandas : How can I read 7 million records?

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:25 24 4
gpt4 key购买 nike

我得到了一个“数据库”(更准确地说是一个丑陋的巨大 CSV 文件),其中包含“发现”过程的结果。我得到的行非常短,它们是有关 65,000 多台计算机上的许可的信息,看起来像:

10/02/2017 09:14:56 a.m.;0000GATMEX39388; ;Microsoft Office Publisher MUI (Spanish) 2010;14.0.7015.1000;20150722;Microsoft Corporation
10/02/2017 09:14:56 a.m.;0000GATMEX39388; ;Microsoft Office Outlook MUI (Spanish) 2010;14.0.7015.1000;20160216;Microsoft Corporation
10/02/2017 09:14:56 a.m.;0000GATMEX39388; ;Microsoft Office Groove MUI (Spanish) 2010;14.0.7015.1000;20150722;Microsoft Corporation
10/02/2017 09:14:56 a.m.;0000GATMEX39388; ;Microsoft Office Word MUI (Spanish) 2010;14.0.7015.1000;20151119;Microsoft Corporation

正如你所看到的,是一个分号分隔的文件,它有进程运行的时间,PC的id,一个空白(我不知道它是什么),程序和版本程序,还有更多字段,但我不关心它们,只有那些是相关的。

所以我转向 Pandas 进行一些分析(基本上是计数),并获得了大约 300 万条记录。问题是,这个文件超过7M记录(我用Notepad++ 64位查看)。那么,如何使用 Pandas 来分析包含如此多记录的文件呢?

我使用的是 Python 3.5、Pandas 0.19.2

为 Fabio 的评论添加信息:

我正在使用:

df = pd.read_csv("inventario.csv", delimiter=";", 
header=None, usecols=[0,1,2,3,4],
encoding="latin_1")

非常准确地说:文件有 7'432,175 行,Pandas 仅访问 3'172,197 行。奇怪的是,如果我将文件加载到 Excel 2017(使用数据查询),它将恰好加载 3,172,197 行。

编辑:评论后,我检查了文件,发现有些行已损坏(大约450行),我不知道它们是否发出信号和文件结束,看起来不是这样,无论如何,我清理了格式错误的行, Pandas 仍然只能读取大约 300 万行。

编辑:

好的,我解决了问题,但实际上,帮助我理解我做错了什么。我不能像以前那样做事情...首先,我清理了文件中的“奇怪”行,它们大约有 500 行,然后我将文件保存到 inv.csv

然后我做了以下事情:

f_inventario = open("inv.csv", "r", encoding="latin1")
f_inventario.readlines()
f_inventario.close()

df = pd.DataFrame(lines)

df.columns = ['data']

df['fecha'] = df.data.apply(lambda s : s.split(';')[0])
df['equipo'] = df.data.apply(lambda s : s.split(';')[1])
df['software'] = df.data.apply(lambda s : s.split(';')[2])
df['version'] = df.data.apply(lambda s : s.split(';')[3][:-1])

df.drop(['data'], axis=1, inplace=True)

现在我得到了包含 700 万行的数据框。如果我执行 df=pd.read_csv('inv.csv' ... ) 它只会读取大约 300 万条记录。

我的问题得到了解决,但这太糟糕了,这不是应该的样子。据我所知,这不是内存问题。难道是某个全局变量告诉 read_csv 加载到最大值???我真的不知道。

最佳答案

如果性能不是问题,一个简单的方法就是简单地将文件逐行读入缓冲区。一旦缓冲区满了,就分析缓冲区中的数据。继续迭代,直到处理完整个文件。完成后,您可以聚合每个 block 的结果以形成最终结果。为了加快速度,您可以查看诸如内存映射之类的内容,例如

import mmap
with open("hello.txt", "r+") as f:
# memory-map the file, size 0 means whole file
map = mmap.mmap(f.fileno(), 0)
# read content via standard file methods
print(map.readline())

see this thread

关于Python/ Pandas : How can I read 7 million records?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com