gpt4 book ai didi

python - Pandas 分类变量转换

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:27 25 4
gpt4 key购买 nike

Data.csv:参数 1、参数 2、参数 3、结果
1,2,cat1,12
2,3,cat2,13
1,6,cat1,6
1,1,cat2,12

假设我从文件中读取数据并将分类变量转换为虚拟变量,如下所示:

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression

data = pd.read_csv('data.csv')

type_dummies = pd.get_dummies(data.house_type)
data = pd.concat([data, type_dummies], axis=1)

我收到了数据帧:

1,2,1,0,..
1,6,0,1,..

我对该数据集进行了简单的线性回归并获得了系数。我如何使用 pandas 将新记录 (new_data = np.array([12,19,cat1])) 转换为 new_data = np.array([12,19,1,0)) 以便在我的线性模型中使用它? (这样新的数据分类变量将被转换为虚拟变量)

最佳答案

通常,您需要设置一个管道来记录正确的 category:code 映射。

class CategoricalTransformer(TransformerMixin):

def fit(self, X, y=None, *args, **kwargs):
self.columns_ = X.columns
self.cat_columns_ = X.select_dtypes(include=['category']).columns
self.non_cat_columns_ = X.columns.drop(self.cat_columns_)

self.cat_map_ = {col: X[col].cat.categories
for col in self.cat_columns_}
self.ordered_ = {col: X[col].cat.ordered
for col in self.cat_columns_}

self.dummy_columns_ = {col: ["_".join([col, v])
for v in self.cat_map_[col]]
for col in self.cat_columns_}
self.transformed_columns_ = pd.Index(
self.non_cat_columns_.tolist() +
list(chain.from_iterable(self.dummy_columns_[k]
for k in self.cat_columns_))
)

def transform(self, X, y=None, *args, **kwargs):
return (pd.get_dummies(X)
.reindex(columns=self.transformed_columns_)
.fillna(0))

更多here .

使用管道 sklearn.pipeline.make_pipeline(CategoricalTransformer(), LinearRegression()),您的predict 方法应该正确地从分类house_type 到变量。

关于python - Pandas 分类变量转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36549711/

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