我使用Python2.7和DASK数据帧
我有一个df,对于内存来说太大了,但是很适合磁盘。
我根据一个索引进行分组,并且不需要在这些组上进行迭代,我发现了如何做到这一点。
当我尝试使用建议的代码时:

for value in drx["col"].unique():
    print value

我有个错误
文件“/usr/local/lib/python2.7/dist packages/dask/dataframe/core.py”,
第1709行,在getitem中
引发notimplementederror()notimplementederror
假设它没有实现,我发现使用unique()迭代得到的序列的方法是here
但当我试图这样利用它时:
data = table["col"].unique()
it = data.iteritems()
for val in it:
    print 1

只要使用迭代器,我的内存就会爆炸,好像所有列的值都保存在内存中一样。
如何使用迭代器值而不将它们全部保存到内存中?

最佳答案

如果所有的唯一值都适合内存,那么请提前调用compute

for item in df[col].unique().compute()
    ...

否则,我建议用拼花之类的东西写入磁盘,然后重复
df[col].unique(split_out=10).to_parquet(...)
s = dd.read_parquet(...)
for item in s.iteritems():
    ...

关于python - Python懒惰地迭代series.unique()值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47119525/

10-12 20:04