gpt4 book ai didi

python - IBEX 中的流水线变压器阶段、Scikit-Learn 和 Pandas 中的列访问问题

转载 作者:行者123 更新时间:2023-12-01 09:26:43 25 4
gpt4 key购买 nike

我正在尝试创建一个基于 scikit-learn 的管道来通过 pandas 数据帧进行管道传输。在每个阶段,只应触及一部分功能,其余功能应不加修改地通过。我为此使用 IBEX,因为 DataFrameMapper 似乎无法为我完成这项工作,因为未保留未触及的字段,为了完整起见,这里是 DataFrameMapper 代码(这对我不起作用,但可能在其他人之前) :

from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import StandardScaler


mapper = DataFrameMapper([
(['x','y','z'], StandardScaler())
])

df_scaled = mapper.fit_transform(df)

数据框具有以下字段

x y z source class

使用 IBEX 我运行以下代码:

from ibex.sklearn.preprocessing import StandardScaler
from ibex.sklearn.preprocessing import LabelEncoder
from ibex import trans

pipeline = (trans(LabelEncoder(), in_cols=['class']) + trans(None, ['source', 'x','y','z'])) | (trans(StandardScaler(), in_cols=['x','y','z']) + trans(None, ['source', 'class']))
df_scaled = pipeline.fit_transform(df)

现在我收到以下错误,因为这些字段似乎没有保留在第二个管道阶段:

KeyError: "['x' 'y' 'z'] not in index"

参见GIST完全错误

最佳答案

ibex (我与人合写)广泛使用 Pandas 多级索引。

假设我们从

开始
import pandas as pd

df = pd.DataFrame({'source': [2, 44], 'class': [0, 1], 'x': [0, 5], 'y': [0, 6], 'z': [0, 8], 'w': 10})
>>> df
class source w x y z
0 0 2 10 0 0 0
1 1 44 10 5 6 8

然后管道的开头给出

>>> (trans(LabelEncoder(), in_cols=['class']) + trans(None, ['source', 'x','y','z'])).fit_transform(df)
functiontransformer_0 functiontransformer_1
0 source x y z
0 0 2 0 0 0
1 1 44 5 6 8

这是设计使然。

您可以通过将管道编写为以下方式来实现您想要的目的:

p = (
trans(LabelEncoder(), in_cols="class")
+ trans(StandardScaler(), in_cols=["x", "y", "z"])
+ trans(None, in_cols="source")
)
>>> p.fit_transform(df)
functiontransformer_0 functiontransformer_1 functiontransformer_2
0 x y z source
0 0 -1.0 -1.0 -1.0 2
1 1 1.0 1.0 1.0 44

关于python - IBEX 中的流水线变压器阶段、Scikit-Learn 和 Pandas 中的列访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50329184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com