如何在 dask DataFrame 上调用 unique()

How to call unique() on dask DataFrame

如何在 dask DataFrame 上调用 unique ?

如果我尝试以与常规 pandas 数据帧相同的方式调用它,我会收到以下错误:

In [27]: len(np.unique(ddf[['col1','col2']].values))

AttributeError                            Traceback (most recent call last)
<ipython-input-27-34c0d3097aab> in <module>()
----> 1 len(np.unique(ddf[['col1','col2']].values))

/dir/anaconda2/lib/python2.7/site-packages/dask/dataframe/core.pyc in __getattr__(self, key)
1924             return self._constructor_sliced(merge(self.dask, dsk), name,
1925                                             meta, self.divisions)
-> 1926         raise AttributeError("'DataFrame' object has no attribute %r" % key)
1927
1928     def __dir__(self):

AttributeError: 'DataFrame' object has no attribute 'values'

我不太熟悉 Dask,但它们似乎具有 Pandas 功能的一个子集,并且该子集似乎不包含 DataFrame.values 属性。

http://dask.pydata.org/en/latest/dataframe-api.html

你可以试试这个:

sum(ddf[['col1','col2']].apply(pd.Series.nunique, axis=0))

我不知道它在性能方面的表现如何,但它应该为您提供值(ddf DataFrame 中 col1 和 col2 中不同值的总数)。

对于Pandas和Dask.dataframe你应该使用drop_duplicates方法

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'x': [1, 1, 2], 'y': [10, 10, 20]})

In [3]: df.drop_duplicates()
Out[3]: 
   x   y
0  1  10
2  2  20

In [4]: import dask.dataframe as dd

In [5]: ddf = dd.from_pandas(df, npartitions=2)

In [6]: ddf.drop_duplicates().compute()
Out[6]: 
   x   y
0  1  10
2  2  20