2016-11-28 8 views
1

Wie rufe ich unique auf einem dask DataFrame auf?So rufen Sie unique() auf dask DataFrame

bekomme ich folgende Fehlermeldung, wenn ich versuche, es auf die gleiche Weise zu nennen, wie für einen regelmäßigen Pandas Datenrahmen:

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' 
+0

Will nicht 'len (np.unique (DDF [[ 'col1', 'col2']]))' in sich Arbeit? –

+0

Nein, es gibt nur 1 zurück. Dies liegt daran, dass die Ausgabe 'np.unique (ddf [['col1', 'col2']])' 'array ([dd.DataFrame ], dtype = object) ' – femibyte

+0

Was ist das gewünschte Ergebnis? Entfernen von doppelten Zeilen durch zwei Spalten Untermenge? – thebeancounter

Antwort

3

Für beide Pandas und Dask.dataframe sollten Sie die drop_duplicates Methode verwenden

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 
+0

Das funktioniert, vielen Dank. – femibyte

0

ich mit Dask nicht allzu vertraut bin, aber sie scheinen eine Untergruppe von Pandas zu haben Funktionalität, und diese Teilmenge scheint das DataFrame.values-Attribut nicht zu enthalten.

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

Sie konnten dieses versuchen:

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

Ich weiß nicht, wie es Tarife Performance-weise, aber es sollte man mit dem Wert (Gesamtzahl der unterschiedlichen Werte in col1 liefern und Spalte 2 aus dem DDF DataFrame).

+0

dask dataframe apply ist für axis = 0 noch nicht implementiert ... – thebeancounter