我正在使用 python 2.7 和 dask dataframe
我有一个 df 对于内存来说太大了,但可以完美地放入磁盘。
我按索引进行分组,然后需要迭代这些组,我发现 here怎么做。
当我尝试使用建议的代码时:
for value in drx["col"].unique():
print value
我收到错误
File "/usr/local/lib/python2.7/dist-packages/dask/dataframe/core.py", line 1709, in getitem raise NotImplementedError() NotImplementedError
假设它没有实现,我发现使用 unique() 迭代我得到的系列的方法是 this
但是当我尝试像这样使用它时:
data = table["col"].unique()
it = data.iteritems()
for val in it:
print 1
只要我使用迭代器,我的内存就会爆炸,就好像所有列的值都保存在内存中一样。
如何使用迭代器值而不将它们全部保存到内存中?
最佳答案
如果所有唯一值都适合内存,则预先调用计算
for item in df[col].unique().compute()
...
否则,我建议使用 parquet 等内容写入磁盘,然后进行迭代
df[col].unique(split_out=10).to_parquet(...)
s = dd.read_parquet(...)
for item in s.iteritems():
...
关于Python dask 延迟迭代series.unique()值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47119525/