Как использовать инкрементные компоновщики Patsy с опцией pandas.read_csv TextFileReader? - PullRequest
0 голосов
/ 10 мая 2019

В 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 . С другой стороны, у Пэтси, похоже, есть построитель итерационных матриц , который принимает итератор.

Однако я не могу понять документацию Пэтси по этому вопросу:

enter image description here

В частности, я не знаю, как написать приемлемую функцию data_iter_maker или для чего предназначен eval_env, и передача объекта TextFileReader, возвращенного pandas.read_csv(chunksize=1000), не сработала.

Как сделать приведенный выше код для работы с этими итеративными конструкциями или какие другие варианты доступны для создания большой матрицы проектирования в Python?

...