【问题标题】:MemoryError during reading csv读取 csv 时出现 MemoryError
【发布时间】:2019-05-26 08:53:36
【问题描述】:

我正在尝试将一些信息读入 Pandas DataFrame 并由于数据的价值而面临问题。

PC 规格:

内存 32 GB

英特尔酷睿 i7 4GHz

设置:

数据在 MySQL DB 中,9 列(7 个整数,1 个日期,1 个日期时间)。数据库在本地机器上,所以没有互联网带宽问题。 2200万数据行。

试图直接从 MySQL 服务器读取 - 它永远不会结束。

engine = sqlalchemy.create_engine('mysql+pymysql://root:@localhost:3306/database')

search_df = pd.read_sql_table('search', engine)

我与 SO 进行了核对,得到的印象是,与其使用连接器,不如解析 CSV。我将表格导出为 CSV。

CSV 文件大小 - 1.5GB

我的代码

dtype = {
    'search_id' : int,
    'job_count_total' : int,
    'job_count_done' : int,
    'city_id_start' : int,
    'city_id_end' : int,
    'date_start' : str,
    'datetime_create' : str,
    'agent_id' : int,
    'ride_segment_found_cnt' : int
}

search_df = pd.read_csv('search.csv', sep=',', dtype=dtype)

我尝试了两个引擎,cpython,不同的块大小,low_memoryTrueFalse,指定了 dtypes 而不是,但仍然得到 MemoryError

我尝试了上面问题中提到的所有方法(标记为原始,我的标记为重复),但没有任何变化。

我发现只有两个不同:

如果我在没有分块的情况下进行解析,我会在解析时遇到内存错误。

当我在块中解析时 - 连接成一个 DF。

此外,按 5_000_000 行分块在解析时会出错,在连接时会出错。

这是一个关于连接的错误消息:

pandas.errors.ParserError: Error tokenizing data. C error: out of memory

【问题讨论】:

  • @Vaishali,我不同意你对问题的结束。我尝试了您添加的帖子中提到的所有内容(不同的引擎,dtypes,低内存和块,没有任何帮助)。你能重新打开这个问题吗?提前谢谢你
  • 我重新打开了这个问题,这是dupe链接。

标签: mysql pandas csv sqlalchemy


【解决方案1】:

基本上,问题出在内存上。 我玩了一些块大小+添加了一些过滤,我后来在块的代码中。 这让我可以将数据框放入内存中。

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 2016-07-04
    • 2016-12-03
    • 2012-10-05
    • 2018-12-26
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多