Я работаю с большими фреймами данных (15 ГБ), и каждый раз, когда я пытаюсь открыть их, возникает ошибка памяти.
Я успешно открыл фрейм данных A, первый столбец которого представляет собой идентификатор, содержащийся также в фрейме данных B. Теперь у B гораздо больше строк и идентификаторов, которые меня не волнуют, и, поскольку я не могу отфильтровать строки после открытия из-за ошибки памяти, я пытался отфильтровать строки, которые мне нужны, при его открытии.
Следуя этому сообщению пропустить спецификацию c строку, которая содержит определенное значение при чтении pandas фрейма данных Я пытался использовать:
import StringIO
import pandas as pd
emptylist = []
def read_file(file_name):
with open(file_name, 'r') as fh:
for line in fh.readlines():
parts = line.split(',')
if parts[0] not in emptylist:
emptylist.append(parts[0])
if parts[0] in set(idlist):
yield line
stream = StringIO.StringIO()
stream.writelines(read_file('B.csv'))
stream.seek(0)
df = pd.read_csv(stream)
, где должен быть пустой список содержат уникальные значения идентификатора информационного кадра B, а idlist - это идентификатор столбца информационного кадра A, преобразованного в список.
Проблема заключается в том, что он по-прежнему выдает ошибку памяти в файле stream.writelines (read_file ('B.csv') )), и я не понимаю, почему, поскольку число строк в Dataframe A должно быть точно таким же, а число столбцов B равно только 2, в сравнении с 3 набора данных A, который вместо этого я могу открыть.
Большое спасибо за помощь!