将 dask QuantileTransformer 应用于同一数据框中的计算字段
Apply dask QuantileTransformer to a calculated field in the same dataframe
我正在尝试将 dask-ml QuantileTransformer
转换应用于 percentage
字段,并在同一数据框中创建一个新字段 percentage_qt
。但是我收到错误 Array assignment only supports 1-D arrays
。如何实现?
import pandas as pd
import dask.dataframe as dd
from dask_ml.preprocessing import QuantileTransformer
mydict = [{'percentage': 12.1, 'b': 2, 'c': 3, 'd': 4},
{'percentage': 10.2, 'b': 200, 'c': 300, 'd': 400},
{'percentage': 11.3, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pd.DataFrame(mydict)
ddf = dd.from_pandas(df, npartitions=10)
qt = QuantileTransformer(n_quantiles=100)
x = ddf[['percentage']]
y = qt.fit_transform(x)
ddf['percentage_qt'] = y # <-- error happens here
你得到的错误如下
ValueError: Array assignment only supports 1-D arrays
A y
不是数组。你可以使用这个技巧
使用与 ddf
相同的索引将 y
转换为 dask 数据帧
dfy = y.to_dask_dataframe(
columns=['percentage_qt'],
index=ddf.index)
由于某些奇怪的原因,0 轴上的连接不起作用(也许我们应该在 GH 上打开一个问题)所以我们可以将两个数据帧连接为
ddf_out = ddf.join(dfy)
哪个returns预期输出
print(ddf_out.compute())
percentage b c d percentage_qt
0 12.1 2 3 4 1.000000
1 10.2 200 300 400 0.000000
2 11.3 2000 3000 4000 0.656772
我正在尝试将 dask-ml QuantileTransformer
转换应用于 percentage
字段,并在同一数据框中创建一个新字段 percentage_qt
。但是我收到错误 Array assignment only supports 1-D arrays
。如何实现?
import pandas as pd
import dask.dataframe as dd
from dask_ml.preprocessing import QuantileTransformer
mydict = [{'percentage': 12.1, 'b': 2, 'c': 3, 'd': 4},
{'percentage': 10.2, 'b': 200, 'c': 300, 'd': 400},
{'percentage': 11.3, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pd.DataFrame(mydict)
ddf = dd.from_pandas(df, npartitions=10)
qt = QuantileTransformer(n_quantiles=100)
x = ddf[['percentage']]
y = qt.fit_transform(x)
ddf['percentage_qt'] = y # <-- error happens here
你得到的错误如下
ValueError: Array assignment only supports 1-D arrays
A y
不是数组。你可以使用这个技巧
使用与 ddf
y
转换为 dask 数据帧
dfy = y.to_dask_dataframe(
columns=['percentage_qt'],
index=ddf.index)
由于某些奇怪的原因,0 轴上的连接不起作用(也许我们应该在 GH 上打开一个问题)所以我们可以将两个数据帧连接为
ddf_out = ddf.join(dfy)
哪个returns预期输出
print(ddf_out.compute())
percentage b c d percentage_qt
0 12.1 2 3 4 1.000000
1 10.2 200 300 400 0.000000
2 11.3 2000 3000 4000 0.656772