Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于具有可变行和50K+的大型csv,加快pandas read#u csv;柱_Python_Pandas_Numpy - Fatal编程技术网

Python 对于具有可变行和50K+的大型csv,加快pandas read#u csv;柱

Python 对于具有可变行和50K+的大型csv,加快pandas read#u csv;柱,python,pandas,numpy,Python,Pandas,Numpy,我试图读取一个CSV文件,其中包含可变数量的列和行,以便计算每列的值(最小值、最大值、平均值、75/95分位数)。列的数量非常大(超过10K列,根据实验配置可以达到100K列或更多)。典型的行数可以是3000个样本。典型的CSV大小为700MB 我对数据集的了解: 第一列是日期类型 其他列的位置和名称因数据集的不同而不同,并且在当前位置未知 加载数据的时间 除第一列外,所有列中的数据都是int64或float64类型 我可以应用一些启发式方法来根据列的名称预先确定某些列(而不是所有列)的数据类型

我试图读取一个CSV文件,其中包含可变数量的列和行,以便计算每列的值(最小值、最大值、平均值、75/95分位数)。列的数量非常大(超过10K列,根据实验配置可以达到100K列或更多)。典型的行数可以是3000个样本。典型的CSV大小为700MB

我对数据集的了解:

  • 第一列是日期类型
  • 其他列的位置和名称因数据集的不同而不同,并且在当前位置未知 加载数据的时间
  • 除第一列外,所有列中的数据都是int64或float64类型
  • 我可以应用一些启发式方法来根据列的名称预先确定某些列(而不是所有列)的数据类型
  • 我进行分析的主要瓶颈是使用pandas
    read\u csv
    加载数据集。一旦数据集被加载到数据帧中,其余的计算就会非常快

    如果我只计算min、max和average,我就可以将数据集分块读取,并尝试加快
    读取csv
    部分的速度。然而,为了确定不同的分位数,我认为必须将整个列读入数据帧

    如何加快数据加载阶段

  • 我可以在dtype参数中指定一些但不是所有的列吗 到
    读取\u csv
    。这是否有助于加快读取csv的速度。如果 那为什么呢
  • 我发现它确实有助于加速。看起来熊猫花了很多时间来决定数据类型。我使用一些关于列名的启发式方法创建了dtype字典。通过在readCSV中提供dtype参数,用于确定类型的函数调用次数减少,从而略微加快了速度。这一点从个人资料中也很明显

    优化前的配置文件

    优化后的外形

  • 根据我所知道的关于 我可以使用哪些数据更快地加载

  • 如果您有耐心加载一次数据,那么您可以将其保存为另一种格式,如
    parquet
    feather
    ,这样以后重新上载会更快


    另一个签出的选项是库。

    我建议您应该尝试使用数据并行处理技术(EX:PySCAPLE)处理数据。也许您可以考虑考虑[DASK库[])。@Martijnterhoor:在使用vaex加载数据之前,我需要将csv转换为其他格式吗?vaex.from_csv在从盒子中读取csv时同样慢。嗨,我不需要一次又一次地加载数据。加载数据后,我会根据数据生成报告,这是我唯一一次加载数据