首页 > 解决方案 > 获取任何列包含特定值的行子集

问题描述

我有一个非常大的数据文件(foo.sas7bdat),我想从中过滤行而不将整个数据文件加载到内存中。例如,我可以通过执行以下操作打印数据集的前 20 行,而无需将整个文件加载到内存中:

import pandas
import itertools

with pandas.read_sas('foo.sas7bdat') as f:
    for row in itertools.islice(f,20):
        print(row)

但是,我不清楚如何仅打印(或最好放置在新文件中)具有包含数字 123.1 的任何列的行。我怎样才能做到这一点?

标签: pythonpandassasstatistics

解决方案


Pandas 能够一次提取一个数据帧。跟随 read_sas() 文档到“chunksize”的踪迹,我遇到了这个:

http://pandas.pydata.org/pandas-docs/stable/io.html#iterating-through-files-chunk-by-chunk

for chunk in pd.read_sas('foo.sas7bdat', interator=True, chunksize=100000):
    print(chunk)

这将得到 100,000 行的块。至于其他问题,您需要查询。但是我不知道问题的限制。如果您创建一个包含所有列的 Dataframe,那么您仍然可能会溢出内存空间,因此一种有效的方法是收集索引并将其放入一个集合中,然后对它们进行排序并使用 .iloc 获取这些条目(如果您想放入)那些进入数据框。

您可能需要使用考虑到这一点的工具。Dask 是在集群上使用的不错选择。


推荐阅读