我创建了一个元组生成器,它从文件中提取信息,仅过滤感兴趣的记录并将其转换为生成器返回的元组。
我尝试从以下位置创建一个 DataFrame:
import pandas as pd
df = pd.DataFrame.from_records(tuple_generator, columns = tuple_fields_name_list)
但抛出一个错误:
...
C:\Anaconda\envs\py33\lib\site-packages\pandas\core\frame.py in from_records(cls, data, index, exclude, columns, coerce_float, nrows)
1046 values.append(row)
1047 i += 1
-> 1048 if i >= nrows:
1049 break
1050
TypeError: unorderable types: int() >= NoneType()
我设法让它在列表中使用生成器,但使用了两倍内存:
df = pd.DataFrame.from_records(list(tuple_generator), columns = tuple_fields_name_list)
我要加载的文件很大,内存消耗很重要。最后一次尝试我的电脑花了两个小时试图增加虚拟内存:(
问题:任何人都知道直接从记录生成器创建 DataFrame 的方法,而无需事先将其转换为列表?
注意:我在 Windows 上将 python 3.3 和 pandas 0.12 与 Anaconda 一起使用。
更新:
读取文件不是问题,我的元组生成器做得很好,它逐行扫描混合记录的文本压缩文件,仅将所需数据转换为正确的类型,然后生成元组生成器形式的字段。一些数字,它在大约一分钟内扫描了 130MB gzip 文件上的 2111412 条记录,未压缩约 6.5GB,并且使用的内存很少。
Pandas 0.12 不允许生成器,开发版允许但将所有生成器放在一个列表中,然后转换为框架。它效率不高,但必须在内部处理熊猫。同时我必须考虑购买更多的内存。