2017-10-19 119 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快很多。