如何在dask DataFrame上调用unique()

时间:2016-11-28 15:54:53

标签: pandas dask

如何在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'

2 个答案:

答案 0 :(得分:5)

对于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

答案 1 :(得分:0)

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

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

你可以试试这个:

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

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