如何对分类数据使用ColumnTransformer?

2024-05-08 14:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试预处理数据。你知道吗

data = {'Country':['Germany', 'Turkey', 'England', 'Turkey', 'Germany', 'Turkey'],
        'Age':['44', '32', '27', '29', '31', '25'],
        'Salary':['5400', '8500', '7200', '4800', '6200', '10850'],
        'Purchased':['yes', 'yes', 'no', 'yes', 'no', 'yes']}
df = pd.DataFrame(data)
X = df.iloc[:,0].values

预期结果如下:

|---|---|---|----|-------|---|
| 1 | 0 | 0 | 44 | 5400  | 1 |
| 0 | 1 | 0 | 32 | 8500  | 1 |
| 0 | 0 | 1 | 27 | 7200  | 0 |
| 0 | 1 | 0 | 29 | 4800  | 1 |
| 1 | 0 | 0 | 31 | 6200  | 0 |
| 0 | 1 | 0 | 25 | 10850 | 1 |

下面是失败的代码。你知道吗

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([("city_category", OneHotEncoder(dtype='int'), [0])], remainder="passthrough")
X = ct.fit_transform(X)

输出:

IndexError: tuple index out of range

我想学习在这种情况下如何使用ColumnTransformer函数?你知道吗


Tags: 数据nofromimportdfdatasklearncountry
2条回答
X_transformer = ColumnTransformer(
    transformers=[
        ("Country",        # Just a name
         OneHotEncoder(), # The transformer class
         [0]            # The column(s) to be applied on.
         )
    ], remainder='passthrough'
)
X = X_transformer.fit_transform(X)
print(X)

不需要学习,你可以用熊猫来学习:

import pandas as pd

data = {
    "Country": ["Germany", "Turkey", "England", "Turkey", "Germany", "Turkey"],
    "Age": ["44", "32", "27", "29", "31", "25"],
    "Salary": ["5400", "8500", "7200", "4800", "6200", "10850"],
    "Purchased": ["yes", "yes", "no", "yes", "no", "yes"],
}

df = pd.DataFrame(data)
df = pd.concat([pd.get_dummies(df["Country"]), df.drop("Country", axis=1)], axis=1)
df[["Age", "Salary"]] = df[["Age", "Salary"]].astype(int)
df["Purchased"] = df["Purchased"].map(lambda x: x == "yes").astype(int)

print(df.head())

输出为:

   England  Germany  Turkey  Age  Salary  Purchased
0        0        1       0   44    5400          1
1        0        0       1   32    8500          1
2        1        0       0   27    7200          0
3        0        0       1   29    4800          1
4        0        1       0   31    6200          0

相关问题 更多 >