Ошибка памяти панд на большой машине с ОЗУ, но не на маленькой машине с ОЗУ: тот же код, те же данные - PullRequest
0 голосов
/ 20 сентября 2018

Я запускаю следующее на двух моих машинах:

import os, sqlite3
import pandas as pd
from feat_transform import filter_anevexp
db_path = r'C:\Users\timregan\Desktop\anondb_280718.sqlite3'
db = sqlite3.connect(db_path)
anevexp_df = filter_anevexp(db, 0)

На моем ноутбуке (с 8 ГБ ОЗУ) это работает без проблем (хотя вызов filter_anevexp занимает несколько минут).На моем рабочем столе (с 128 ГБ ОЗУ) в пандах происходит сбой с ошибкой памяти:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\timregan\source\MentalHealth\code\preprocessing\feat_transform.py", line 171, in filter_anevexp
    anevexp_df = anevexp_df[anevexp_df["user_id"].isin(df)].copy()
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\frame.py", line 2682, in __getitem__
    return self._getitem_array(key)
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\frame.py", line 2724, in _getitem_array
    return self._take(indexer, axis=0)
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\generic.py", line 2789, in _take
    verify=True)
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals.py", line 4539, in take
    axis=axis, allow_dups=True)
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals.py", line 4425, in reindex_indexer
    for blk in self.blocks]
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals.py", line 4425, in <listcomp>
    for blk in self.blocks]
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\internals.py", line 1258, in take_nd
    allow_fill=True, fill_value=fill_value)
  File "C:\Users\timregan\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\algorithms.py", line 1655, in take_nd
    out = np.empty(out_shape, dtype=dtype)
MemoryError

Что мне нужно сделать, чтобы предотвратить ошибки (например, адресацию ошибок) на машинах с большим объемом памяти?

NB Я не включил код в функцию filter_anevexp, потому что мне не интересны советы о том, как уменьшить объем используемой памяти.Меня интересует понимание того, почему один и тот же код, работающий с теми же данными, завершается с ошибкой памяти на машине с 128 ГБ ОЗУ, в то время как он успешно выполняется на машине с 8 ГБ ОЗУ?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы используете 32-битную версию на своем домашнем компьютере, это означает, что ваши исполняемые файлы Python могут иметь доступ только к 4 ГБ оперативной памяти.Попробуйте переустановить python37 с 64 битами вместо 32, которые вы используете в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...