在Python 3中,我正在使用pandas读取大型压缩的CSV文件,并使用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列-如果文件包含一百万行,则需要超过94G的RAM,这是我使用的计算机的限制。我想将其转换为迭代解决方案,如果您通过chunksize parameter,则会在文档中发现pandas.read_csv()
在页面中进行迭代。在另一端,patsy似乎有一个iterative design matrix builder which accepts an iterator.
在这一点上,我仍然无法理解patsy的记录:
特别是我不知道如何编写可接受的data_iter_maker
函数或eval_env的作用,并且传递TextFileReader
返回的pandas.read_csv(chunksize=1000)
对象无效。
如何使上面的代码与这些迭代构造一起使用,或者在Python中创建大型设计矩阵还可以使用哪些其他选项?