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



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

Pandas 能够一次拉取一个区块的数据帧。 按照 read_sas(( 文档到"块大小"的踪迹,我遇到了这个:

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 行的块。 至于另一个问题,您需要查询。 但是我不知道问题的约束。 如果您创建一个包含所有列的数据帧,那么您仍然可能会溢出内存空间,因此一种有效的方法是收集索引并将其放入一个集中,然后对它们进行排序并使用 .iloc 获取这些条目(如果要将它们放入数据帧(。

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

最新更新