在流程之间共享大熊猫分块的数据框和字典

问题描述

我需要处理一个.csv文件,该文件太大而无法容纳在熊猫数据框中的内存中。 幸运的是,可以通过设置块大小来对它进行块化,我可以一个一个地处理块。 但是,处理文件非常慢,因为我需要遍历每一行的每个值。

我想为多个进程提供大块数据,以加快处理速度。

但是有一个陷阱:处理每行的方式取决于处理其他行的方式。

我正在做的是用单个数字id替换每个值(字符串,它们中的大多数在很多行中重复了很多次),以便输出一个小得多的文件和一个与之对应的字典(听起来很适合实际的数据库,但这只是.csv文件,我不确定。)

因此,我将需要在进程之间共享字典,以免在同一列中不给例如两个不同的编号赋予相同的编号id,或者相反地却不给相同的编号id赋予两个不同的值。我还保留了一个字典,该字典可以告诉我给定列中的下一个可用数字。

我发现的每个问题都是“如何打开大文件?” (通过分块读取它们,但它们不需要多重处理)或“如何对此进行多重处理?” (但是它们要么是1-不对文件进行分块处理2-试图处理多个文件而不是单个大文件,3-尴尬地并行执行某些操作,不需要并发其他共享对象),所以我很茫然,特别是因为我没有多处理方面的经验,所以没有一点经验与Python无关

顺便说一句,整个过程是为了比较两组.csv文件(“之前”和“之后”),检查丢失或附加的行,并检查数值差异(最大增量)在同一列上(其他列是相同的),因此,如果您知道在不将整个文件加载到内存中的情况下执行此操作的任何方法,我都会接受(尽管我仍然想知道我的要求)。 这些行的顺序可能不同。

我尝试逐块进行比较,同时跟踪“可能丢失”和“潜在附加”未对齐的行,以便在以后的块中找到它们,但是代码变得非常混乱,因此我放弃了。肯定会更快,但是整个事情只会做一次,所以我可以承担一点时间损失,只要它不是太多(现在是)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...