擅长:python、mysql、java
<p>我也遇到过类似的问题,我在加载之前用过滤数据解决了它。当您使用read.table读取文件时,您将整个文件加载到一个数据帧中,也可能将整个文件加载到内存中,或者由于使用不同的类型而进行一些复制,因此这是使用的6GB。</p>
<p>您可以制作一个生成器来逐行加载文件的内容,我假设数据是基于行的,一条记录是big_table.txt中的一行,所以</p>
<pre><code>def big_table_generator(filename):
with open(filename, 'rt') as f:
for line in f:
if is_needed_row(line): #Check if you want this row
#cut_columns() return a list with only the selected columns
record = cut_columns(line)
yield column
gen = big_table_generator('big_table.txt')
df = pandas.DataFrame.from_records(list(gen))
</code></pre>
<p>请注意,列表(gen)、pandas 0.12和以前的版本不允许生成器,因此必须将其转换为列表,以便生成器提供的所有数据都放在内存中。0.13在内部也会做同样的事情。此外,还需要两倍于所需数据的内存,一个用于加载数据,另一个用于将数据放入pandas NDframe结构。</p>
<p>您还可以使生成器从压缩文件中读取,而Python3.3GZIP库只解压缩所需的chunck。</p>