python - 获取任何列包含特定值的行子集
问题描述
我有一个非常大的数据文件(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() 文档到“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 是在集群上使用的不错选择。
推荐阅读
- python - 尝试——除了挣扎
- scala - SPARK:在slave上加载master的目录
- javascript - 如何为 AmChart 生成的 PDF 自定义页眉和页脚?
- python - 通过 Python 的 Bitbucket 服务器 REST API
- c# - 如何通过 node.js 或 c# 从比特币区块链网络获取最新交易
- apache-spark - 无法指向使用来自 spark 的配置单元创建的外部表
- javascript - Firebase 消息传递服务工作人员点击处理程序不起作用
- java - 向运行的 tomcat 添加新的(未使用的)jar 是否存在风险
- excel - Excel Vba 使用带有按钮的自动过滤器将所有 excel 数据复制到工作表
- laravel - LARAVEL 部署后有什么命令可以执行吗?