读取csv时出现MemoryError

时间:2018-12-28 14:29:51

标签: mysql pandas csv sqlalchemy

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

PC规格:

RAM 32 GB

IntelCore i7 4GHz

设置:

数据在MySQL DB中,共有9列(7个整数,1个日期,1个DateTime)。 DB在本地计算机上,因此没有Internet带宽问题。 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,未指定dtype,但仍然得到MemoryError

我尝试了上面问题中提到的所有内容(标记为起源,我的标记为重复),但没有任何变化。

我发现只有两个区别:

如果我没有分块地进行分析,则在分析时会出现内存错误。

当我分块解析时-连接到一个DF上。

此外,按5_000_000行进行分块会在解析时产生错误,而在连接时会产生错误。

以下是串联时的错误消息:

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

1 个答案:

答案 0 :(得分:0)

基本上,问题出在内存上。 我在块大小上玩了一点,并增加了一些过滤,稍后我在块中的代码中进行了过滤。 这使我可以将数据框放入内存中。