使用Pandas vs.MySQL读取庞大的CSV文件

时间:2018-10-20 19:37:11

标签: python mysql pandas csv

我有一个500+ MB的CSV数据文件。我的问题是,由于所有工作都映射到SQL查询并将优化留给了优化器,因此Python MySQL client会更快地进行数据处理(例如,读取,处理)。但是,与此同时,Pandas正在处理的文件应该比与服务器进行通信的速度更快?

我已经检查了"Large data" work flows using pandasBest practices for importing large CSV filesFastest way to write large CSV with PythonMost efficient way to parse a large .csv in python?。但是,我还没有发现关于Pandas和MySQL的任何比较。

用例:

我正在处理由1,737,123行和8列组成的文本数据集。我正在将此数据集馈入RNN / LSTM网络。我会在喂食之前进行一些预处理,这是使用自定义编码算法进行编码的。

更多详细信息

我要进行250多次实验,并尝试12种架构(不同的模型设计)。

我很困惑,我觉得我想念一些东西。

1 个答案:

答案 0 :(得分:1)

没有在线比较,因为这两种情况给出了不同的结果:

  • 使用Pandas,您最终在内存中拥有Dataframe(作为NumPy ndarray在后​​台),可以作为本地Python对象进行访问
  • 使用MySQL客户端,您最终获得磁盘(unless you're using an in-memory database)上MySQL数据库中的数据,可通过IPC /套接字访问

因此,性能取决于

  • 低速通道(IPC,磁盘,网络)需要传输多少数据
  • 传输与处理相对较快(其中哪个是瓶颈)
  • 您的处理设备更喜欢哪种数据格式(即将涉及哪些其他转换)

例如:

  • 如果您的处理工具可以驻留在将用于读取它的同一(Python)进程中,则最好将其直接读入Python类型,因为您无需将其全部转移到MySQL进程,然后再次返回(每次都转换格式)。
  • OTOH,如果您的处理设备是通过其他某种流程和/或语言实现的,例如驻留在计算集群中,通过从等式中删除相对较慢的Python,将其直接挂接到MySQL可能会更快,并且因为您需要再次传输数据并将其转换为处理应用程序的本机对象。