首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在大型csv文件中使用熊猫或巨蟒中的dask有效地读取

在大型csv文件中使用熊猫或巨蟒中的dask有效地读取
EN

Stack Overflow用户
提问于 2020-01-02 14:47:18
回答 2查看 2.7K关注 0票数 1

我想以最快的方式将大型csv文件读入python。我有一个大约1亿行的csv文件。我遇到了这个初级的https://medium.com/casual-inference/the-most-time-efficient-ways-to-import-csv-data-in-python-cc159b44063d,他们经过了几个包

  1. csv
  2. pandas
  3. dask
  4. datatable
  5. paratext

就我的目的而言,"csv“太原始了,我想利用其他包中包含的类型推断。我需要它同时在windows和linux机器上工作,我还研究过datatable和paratext,但是在安装正确的包依赖项(它们都不在anaconda package repo上)时遇到了问题。所以只剩下熊猫和达斯克了。乍一看,达斯克看起来要快得多,但我只意识到只有当你叫".compute“时,它才能进行计算。

我的具体用例是,尽管原始csv文件是100+百万行,但我只需要将其中的一个子集加载到内存中。例如,拥有date >= T的所有行都有比下面的示例更有效的方法吗?熊猫和达斯克都有相似的时间。

编辑: csv文件每天更新,文件的行没有预先知道的顺序。不一定是最近的日期在文件的末尾

代码语言:javascript
复制
import pandas as pd
import dask as dd
from datetime import datetime

s = datetime.now()
data1 = pd.read_csv("test.csv", parse_dates=["DATE"])
data1 = data1[data1.DATE>=datetime(2019,12,24)]
print(datetime.now()-s)

s = datetime.now()
data2 = dd.read_csv("test.csv", parse_dates=["DATE"])
data2 = data2[data2.DATE>=datetime(2019,12,24)].compute()
print(datetime.now()-s)
EN

回答 2

Stack Overflow用户

发布于 2020-01-02 17:43:38

我觉得你的Dask解决方案不错。特别是对于解析CSV,您可能需要使用Dask的多进程调度程序。大多数Pandas操作更适合使用线程,但基于文本的处理(如CSV )是一个例外。

代码语言:javascript
复制
data2 = data2[data2.DATE>=datetime(2019,12,24)].compute(scheduler="processes")

有关详细信息,请参阅https://docs.dask.org/en/latest/scheduling.html

票数 2
EN

Stack Overflow用户

发布于 2020-01-02 15:48:07

CSV不是一种有效的过滤文件格式,CSV文件没有数据字段的索引,没有基于密钥的访问。对于每个筛选器操作,您总是必须读取所有行。

您可以通过使用用C编写的库或比另一个库稍微聪明一些的库来稍微提高性能,但是不要期望奇迹/如果您识别/实现了一个优化的C版本,读取您的行并执行初始筛选,那么它的性能会提高几%到3倍。

如果您更频繁地读取CSV文件,那么在第一次读取期间转换该文件可能是有用的(存在多个选项:手工手工艺助手、索引、排序、数据库、.)并在“数据库”上执行后续读取。

如果您知道新的CSV文件与前一个版本相同,加上附加到文件末尾的行,则必须记住前一个版本最后一行的位置,只需将新行添加到优化的数据文件中。(数据库.)

其他文件格式的效率可能要高出数百或数千倍,但第一次创建这些文件的代价可能至少与搜索一样昂贵(因此,如果只读取一次,则无法优化)。

如果上述任何条件都不是真的,您就不能指望会有巨大的性能提高。

你可以看看What is the fastest way to search the csv file?

对于加速(假设文件可以按照搜索/筛选标准排序/索引)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59565266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档