2016-09-16 133 views
1

我想讀3GB文件轉換成數據幀的熊貓與read_csv功能得到錯誤:內存不足大熊貓 - 內存不足

我在PC與16GB的RAM,Ubuntu的16.04和0.18大熊貓版本。我知道我可以提供dtype以方便上傳,但是我的數據集中有太多列,我想先加載它然後決定數據類型。

更新:這不是一個重複的問題。 3GB應該很容易安裝在16GB的機器上。

另一個更新:這是Traceback。

Traceback (most recent call last): 
    File "/home/a/Dropbox/Programming/Python/C and d/main.com.py", line 9, in <module> 
    preprocessing() 
    File "/home/a/Dropbox/Programming/Python/C and d/main.com.py", line 5, in preprocessing 
    df = pd.read_csv(filepath_or_buffer = file_path, sep ='\t', low_memory = False) 
    File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 498, in parser_f 
    return _read(filepath_or_buffer, kwds) 
    File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 285, in _read 
    return parser.read() 
    File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 747, in read 
    ret = self._engine.read(nrows) 
    File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 1197, in read 
    data = self._reader.read(nrows) 
    File "pandas/parser.pyx", line 769, in pandas.parser.TextReader.read (pandas/parser.c:8011) 
    File "pandas/parser.pyx", line 857, in pandas.parser.TextReader._read_rows (pandas/parser.c:9140) 
    File "pandas/parser.pyx", line 1833, in pandas.parser.raise_parser_error (pandas/parser.c:22649) 
pandas.parser.CParserError: Error tokenizing data. C error: out of memory 

不幸的是,我不能發佈整個數據文件,但它有大約2.5萬行,主要是分類(字符串)數據

希望最後更新:

這是我原來的代碼將數據讀入數據幀:

import pandas as pd 
def preprocessing(): 
    file_path = r'/home/a/Downloads/main_query.txt' 
    df = pd.read_csv(filepath_or_buffer = file_path, sep ='\t', low_memory = False) 

上面的代碼產生了錯誤消息,我在上面發佈。

我再試圖刪除low_memory = False,和一切工作,但只給了警告:

sys:1: DtypeWarning: Columns (17,20,23,24,33,44,58,118,134, 
135,137,142,145,146,147) have mixed types. 
Specify dtype option on import or set low_memory=False. 
+0

,你可以嘗試[此方法](http://stackoverflow.com/a/37845530/5741205) – MaxU

+0

@MaxU感謝您的建議。也可以指定'dtype'來減少內存消耗。請你刪除重複的標籤。你所指的問題說得不好。在熊貓文檔中沒有任何地方可以找到文件大小的限制,因此無論文件大小是6GB還是600TB,以及有足夠的RAM都可以處理它,這可能很慢,但這不是重點。以前在有記憶處理的熊貓中存在錯誤,而且你的問題已解決。這個似乎也是bug,所以需要適當的關注。 – user1700890

+0

可以請您發佈完整的錯誤追溯?當然你可以使用'dtype',但是我們沒有看到你的數據,所以我們不能建議你'dtype'參數的值... – MaxU

回答

2

UPDATE:Pandas 0.19.0 it should be possible to specify categorical dtype when using read_csv() method

pd.read_csv(filename, dtype={'col1': 'category'}) 

,所以你可以嘗試使用熊貓0.19。 0 RC1

OLD回答:

您可以在成批讀您的CSV和它串聯所得到的DF每一步:

chunksize = 10**5 
df = pd.DataFrame() 

for chunk in (pd.read_csv(filename, 
          dtype={'col1':np.int8, 'col2':np.int32, ...} 
          chunksize=chunksize) 
      ): 
    df = pd.concat([df, chunk], ignore_index=True) 

注:參數dtype是不受支持的發動機=「蟒蛇」