2017-10-19 131 views
1

我想读取20gb的数据集。我已经搜索了一个解决方案,我试过了:阅读大型数据集大熊猫

data = pd.read_csv('dataset.csv', chunksize=1000,usecols=fields) 
    df = pd.concat(data, ignore_index=True) 

但传递到串联时仍然出现内存错误。 (我改变块大小很多时间,仍然是相同的)

我有16GB的RAM工作在3000mhz。

有什么建议吗?

我正在尝试将数据导入数据框以进行数据分析并将其导出回来。 (数据需要清理干净和噪音的数据)。

+1

您是否真的需要将整个数据集放在内存中,还是可以按块处理它? – MaxU

+0

[这个答案](https://stackoverflow.com/a/46425826/4889267)可能是相关的 - 读取(这是为了打开大型excel文件,并建议使用CSV) – AK47

+0

相关:https:// stackoverflow。 com/questions/14262433/large-data-work-flows-using-pandas?rq = 1当你只有16GB内存时,你是否也相信可以加载20GB文件? – EdChum

回答

1

不确切地知道你想要/需要用数据完成的事情的确很棘手 - 但大多数数据操作可以用SQL来完成,所以我建议使用sqlite3作为数据处理引擎。

sqlite3将数据存储在磁盘上,并将规避将20Gb数据读入16Gb或RAM的不可能性。

另请阅读pandas.DataFrame.to_sql

你需要像(未测试)的文档:

import sqlite3 
conn = sqlite3.connect('out_Data.db') 

data = pd.read_csv('dataset.csv', chunksize=1000, usecols=fields) 

for data_chunk in data: 
    data_chunk.to_sql(conn, if_exists='append') 

c = conn.cursor() 
c.execute("SELECT * FROM data GROUPBY variable1") 
<<<perform data manipulation using SQL>>> 

记住,你不能把你的数据导入,除非一个大熊猫数据帧您执行的操作会显着减少内存占用量。

要转换回的.csv遵循Write to CSV from sqlite3 database in python

为了获得更好的性能:

  • 增加块大小到最大您的系统可以处理
  • sqlite3的CLI实际上有自动导入方法。 csv文件比通过python快很多。