根据 Dask.Series 创建类别代码地图
Create a category-code map based off a Dask.Series
我有一个 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,但我实际上无法访问原始数据框,因此它需要从系列“test”开始。
下面的怎么样:
category_mapping = dd.concat([test, test.cat.codes], axis=1)
category_mapping.columns = ["Category", "Code"]
category_mapping = category_mapping.drop_duplicates()
print(category_mapping.compute())
这会给你:
Category Code
0 setosa 0
50 versicolor 1
100 virginica 2
我有一个 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,但我实际上无法访问原始数据框,因此它需要从系列“test”开始。
下面的怎么样:
category_mapping = dd.concat([test, test.cat.codes], axis=1)
category_mapping.columns = ["Category", "Code"]
category_mapping = category_mapping.drop_duplicates()
print(category_mapping.compute())
这会给你:
Category Code
0 setosa 0
50 versicolor 1
100 virginica 2