获取任何列包含特定值的行的子集

时间:2018-06-03 20:16:39

标签: python pandas sas statistics

我有一个非常大的数据文件(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的列的行。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

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来获取这些条目,如果你想放入那些进入Dataframe。

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