我正在尝试将一些信息读入pandas dataframe中,并且由于数据的价值而面临问题。
pc规格:
内存32 gb
英特尔i7 4ghz
设置:
数据在mysql数据库中,有9列(7 int,1 date,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)
我两个引擎都试过了, c
以及 python
,不同的块大小, low_memory
作为 True
以及 False
,指定了dtypes和not,但仍在获取 MemoryError
.
我尝试了上面问题中提到的一切(标记为起源,我的为复制品),但没有任何改变。
我只发现了两个不同点:
如果我在没有块的情况下解析,那么在解析时会出现内存错误。
当我在分块解析的时候-连接成一个df。
另外,按5\u 000\u 000行分块在解析时会出错,在连接时会出错。
以下是有关连接的错误消息:
pandas.errors.ParserError: Error tokenizing data. C error: out of memory
1条答案
按热度按时间euoag5mw1#
基本上,问题出在记忆上。我玩了一点区块大小+添加了一些过滤,我后来在代码中对区块。这使我能够将Dataframe放入内存。