【发布时间】: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)
我尝试了两个引擎,c 和 python,不同的块大小,low_memory 和 True 和 False,指定了 dtypes 而不是,但仍然得到 MemoryError。
我尝试了上面问题中提到的所有方法(标记为原始,我的标记为重复),但没有任何变化。
我发现只有两个不同:
如果我在没有分块的情况下进行解析,我会在解析时遇到内存错误。
当我在块中解析时 - 连接成一个 DF。
此外,按 5_000_000 行分块在解析时会出错,在连接时会出错。
这是一个关于连接的错误消息:
pandas.errors.ParserError: Error tokenizing data. C error: out of memory
【问题讨论】:
-
@Vaishali,我不同意你对问题的结束。我尝试了您添加的帖子中提到的所有内容(不同的引擎,dtypes,低内存和块,没有任何帮助)。你能重新打开这个问题吗?提前谢谢你
-
我重新打开了这个问题,这是dupe链接。
标签: mysql pandas csv sqlalchemy