【问题标题】:Speeding up read_csv in python pandas在 python pandas 中加速 read_csv
【发布时间】:2022-02-08 17:09:57
【问题描述】:

我正在尝试使用 Pandas 'read_csv' 方法解析一个巨大的 csv 文件(大约 5000 万行)。

下面是我正在使用的代码sn-p:

df_chunk = pd.read_csv(db_export_file, delimiter='~!#', engine='python', header=None, keep_default_na=False, na_values=[''], chunksize=10 ** 6, iterator=True)

Therafter 使用pd.concat 方法我得到了用于进一步处理的整套数据帧。

一切正常,从该 csv 文件读取操作需要将近 6 分钟来创建数据帧。

我的问题是,有没有其他方法可以使用相同的模块和方法使这个过程更快?

以下是以 csv 文件形式呈现的示例数据

155487~!#-64721487465~!#A1_NUM~!#1.000 155487~!#-45875722734~!#A32_ENG~!#This is a good facility 458448~!#-14588001153~!#T12_Timing~!#23-02-2015 14:50:30 458448~!#-10741214586~!#Q2_56!#

提前致谢

【问题讨论】:

  • 我们需要更多信息,例如列的类型是什么,是否有重复的字符串数据,是否正确键入(例如,没有混合的数字和非数字数据)等。向我们展示一个示例会有所帮助。
  • 我认为你最好的选择是split the csv,然后使用多处理读取所有块:stackoverflow.com/questions/36587211/…
  • 您好,我更新了一个示例文件数据,实际上是混合类型。

标签: python pandas dataframe


【解决方案1】:

我认为你最好的选择是split the csv

split -l LINES_PER_FILE YOUR.CSV OUTPUT_NAMES

然后使用多处理读取所有块。你有一个example here:

import os
import pandas as pd 
from multiprocessing import Pool

# wrap your csv importer in a function that can be mapped
def read_csv(filename):
    'converts a filename to a pandas dataframe'
    return pd.read_csv(filename)


def main():
    # set up your pool
    pool = Pool(processes=8) # or whatever your hardware can support

    # get a list of file names
    files = os.listdir('.')
    file_list = [filename for filename in files if filename.split('.')[1]=='csv']

    # have your pool map the file names to dataframes
    df_list = pool.map(read_csv, file_list)

    # reduce the list of dataframes to a single dataframe
    combined_df = pd.concat(df_list, ignore_index=True)

if __name__ == '__main__':
    main()

【讨论】:

    【解决方案2】:

    我的案子以及它是如何解决的

    我有一个同样庞大的数据集,并且必须实施自定义转换器。由于自定义转换器,pandas.read_csv() 需要很长时间。

    我的解决方案是使用modin。这很简单,只需要更改顶部的导入,其他一切都会自动完成。

    看一下页面:https://github.com/modin-project/modin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-17
      • 2019-03-17
      • 2017-08-02
      • 1970-01-01
      • 2013-01-02
      • 2016-12-13
      • 2014-11-07
      • 1970-01-01
      相关资源
      最近更新 更多