既知のカテゴリカル dtype を持つ Dask.Series があります。シリーズ全体を計算することなく、関連するマッピングを示す小さなデータフレームを作成したいと考えています。どうすればこれを達成できますか?
import pandas as pd
import dask.dataframe as dd
from dask_ml.preprocessing import Categorizer
df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
df = dd.from_pandas(df, npartitions = 2)
df = Categorizer().fit_transform(df)
test = df['species']
上記のコードは、dask にカテゴリ シリーズを作成します。を使用test.cat.codes
すると、カテゴリを次のようなコードに変換できます。
> test.compute()
Out[5]:
0 setosa
1 setosa
2 setosa
3 setosa
4 setosa
145 virginica
146 virginica
147 virginica
148 virginica
149 virginica
Name: species, Length: 150, dtype: category
Categories (3, object): [setosa, versicolor, virginica]
> test.cat.codes.compute()
Out[6]:
0 0
1 0
2 0
3 0
4 0
..
145 2
146 2
147 2
148 2
149 2
Length: 150, dtype: int8
望ましい結果は、最後まで計算コマンドを使用せずに、以下に示すようにカテゴリからコードへのマッピングを取得することです。
望ましい出力:
Category Code
setosa 0
versicolor 1
virginica 2
私は多くのことを試しましたが、それらはすべて、シリーズを pandas シリーズまたはデータフレームに変換する必要があり、dask を使用する目的を無効にします。再パーティション化せずにこれを行うのに役立つものはdaskで見つかりませんでした。これはやりたくないことです。また、この例ではセットアップ目的で DataFrame にアクセスできますが、実際には元のデータフレームにアクセスできないため、一連の「テスト」から開始する必要があることに注意してください。