В Python 3 я читаю большой сжатый CSV-файл, используя pandas , и преобразую его в матрицы проектирования с помощью patsy . Для менее чем миллиона строк я могу сделать:
filename = 'data.csv.gz'
df = pd.read_csv(filename)
iv_variables = [ c for c in df.columns if c.startswith('iv_') ]
dv_variables = [ c for c in df.columns if c.startswith('dv_') ]
formula = " + ".join(dv_variables) + " ~ " + " + ".join(pdi_variables)
Y, X = patsy.dmatrices(formula, df)
Однако файл CSV очень широк - 700 столбцов - и если файл содержит более миллиона строк, это занимает более 94 ГБ ОЗУ, что является пределом для машины, которую я использую. Я хотел бы перевести это в итеративное решение и нашел в документации, что pandas.read_csv()
с итерацией на страницах, если вы передаете параметр chunksize . С другой стороны, у Пэтси, похоже, есть построитель итерационных матриц , который принимает итератор.
Однако я не могу понять документацию Пэтси по этому вопросу:
В частности, я не знаю, как написать приемлемую функцию data_iter_maker
или для чего предназначен eval_env, и передача объекта TextFileReader
, возвращенного pandas.read_csv(chunksize=1000)
, не сработала.
Как сделать приведенный выше код для работы с этими итеративными конструкциями или какие другие варианты доступны для создания большой матрицы проектирования в Python?