我已经完成了scikit-learn模型的训练,并将其保存为pickle文件.现在我想加载模型并运行预测,但我不知道如何预处理输入数据.

dataset = {
    'airline': ['SpiceJet', 'Indigo', 'Air_India']
}
df = pd.DataFrame.from_dict(dataset)

airline列有3条航线,用于创建具有以下代码的虚拟列:

def preprocessing(df):
    dummies = pd.get_dummies(df["airline"], drop_first=True)
    return dummies

用于训练的数据集将具有如下模式:

| airline_SpiceJet | airline_Indigo | airline_Air_India |

我的问题是关于下面的输入,如何将输入映射到相应的列?

input = {
    'airline': ['SpiceJet']
}

数据集的预期输出:

| airline_SpiceJet | airline_Indigo | airline_Air_India |
| ---------------- | -------------- | ----------------- |
|                1 |              0 |                 0 |

推荐答案

我认为pandas get\u dummies()方法的问题在于,它根据输入数据定义了虚拟对象的列,如本期Dummy variables when not all categories are present中所述.

根据那里的答案,您可以调整代码以获得如下假人:

dataset = {
    'airline': ['SpiceJet', 'Indigo', 'Air_India']
}

input = {
    'airline': ['SpiceJet']
}

possible_categories = dataset["airline"]


dummy_input = pd.Series(input["airline"])
display(pd.get_dummies(dummy_input.astype(pd.CategoricalDtype(categories=possible_categories))))

输出:

SpiceJet Indigo Air_India
1 0 0

有了更多的输入数据,它可能看起来像这样:

input_2 = {
    'airline': ['SpiceJet','Indigo','SpiceJet','Indigo','Air_India']
}

dummy_input_2 = pd.Series(input_2["airline"])
display(pd.get_dummies(dummy_input_2.astype(pd.CategoricalDtype(categories=possible_categories))))
SpiceJet Indigo Air_India
1 0 0
0 1 0
1 0 0
0 1 0
0 0 1

Python相关问答推荐

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

max_of_three使用First_select、second_select、

Python中的嵌套Ruby哈希

从dict的列中分钟

在Python中动态计算范围

使用密钥字典重新配置嵌套字典密钥名

pandas:排序多级列

Python列表不会在条件while循环中正确随机化'

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

合并帧,但不按合并键排序

ConversationalRetrivalChain引发键错误

巨 Python :逆向猜谜游戏

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

如何重新组织我的Pandas DataFrame,使列名成为列值?

PYTHON中的selenium不会打开 chromium URL

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

奇怪的Base64 Python解码

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?

合并Pandas中的数据帧,但处理不存在的列

对列中的数字进行迭代,得到n次重复开始的第一个行号