繁体   English   中英

对DataFrame行的内存有效过滤

[英]Memory-efficient filtering of `DataFrame` rows

我有一个大的DataFrame对象(1,440,000,000行)。 我在内存(交换包含)限制下运行。

我需要提取具有某个字段值的行的子集。 但是,如果我这样做:

>>> SUBSET = DATA[DATA.field == value]

我以MemoryError异常或崩溃结束。 有什么方法可以显式过滤行-无需计算中间掩码( DATA.field == value )?

我已经找到了DataFrame.filter()DataFrame.select()方法,但是它们对列标签/行索引而不是行数据进行操作。

使用query ,它应该快一点:

df = df.query("field == value")

如果通过任何更改,DataFrame中的所有数据都是相同的类型,请改用numpy数组,这样可以提高内存效率和速度。 您可以通过df.as_matrix()将数据框转换为numpy矩阵。

另外,您可能想通过以下方式检查数据帧已占用的内存量:

    import sys
    sys.getsizeof()

返回以字节为单位的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM