python - 如何自动将大量分类数据从字符串转换为数值?
问题描述
我正在尝试建立一个决策树回归来预测汽车的 MSRP(制造商建议零售价)的值。但是,我在将分类值转换为数值时遇到了问题。
我的问题:我有 8 列分类特征,有些列有多达 40 种不同类型的唯一值和 20,000 个实例。我应该使用什么方法来转换分类数据以用于决策树回归?有没有办法自动输入唯一值而不是手动输入?
我尝试使用 LabelEncoder 转换分类值,但由于某种原因,第一列中 df.values (BMW,Acura ...) 的数组即使在我转换后也没有改变。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_excel(r'C:\Users\user\Desktop\data.xlsx')
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
df.values[:, 0] = labelencoder.fit_transform(df.values[:, 0])
这是我得到的结果:
array([['BMW', '1 Series M', 2011, ..., 19, 3916, 46135],
['BMW', '1 Series', 2011, ..., 19, 3916, 40650],
['BMW', '1 Series', 2011, ..., 20, 3916, 36350],
...,
['Acura', 'ZDX', 2012, ..., 16, 204, 50620],
['Acura', 'ZDX', 2013, ..., 16, 204, 50920],
['Lincoln', 'Zephyr', 2006, ..., 17, 61, 28995]], dtype=object)
我希望第一列是用于 DT 回归的数值。任何人都可以帮忙吗?我在我的 FYP 中这样做,这是我第一次接近机器学习。
解决方案
有多种方法可以使用 pandas 和 sklearn 将分类数据转换为数字:
- pandas.get_dummies() (一种热编码)
示例:
import numpy as np
import pandas as pd
df = pd.DataFrame([['BMW', '1 Series M', 2011, 19, 3916, 46135],
['BMW', '1 Series', 2011,19, 3916, 40650],
['BMW', '1 Series', 2011,20, 3916, 36350],
['Acura', 'ZDX', 2012, 16, 204, 50620],
['Acura', 'ZDX', 2013, 16, 204, 50920],
['Lincoln', 'Zephyr', 2006, 17, 61, 28995]]) #Sample dataframe
pd.get_dummies(df, columns = [0,1,2]) #Dummies of 1st,2nd and 3rd column
2. LabelEncoder
示例
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame([['BMW', '1 Series M', 2011, 19, 3916, 46135],
['BMW', '1 Series', 2011,19, 3916, 40650],
['BMW', '1 Series', 2011,20, 3916, 36350],
['Acura', 'ZDX', 2012, 16, 204, 50620],
['Acura', 'ZDX', 2013, 16, 204, 50920],
['Lincoln', 'Zephyr', 2006, 17, 61, 28995]]) #Sample dataframe
df[[0,1,2]].apply(LabelEncoder().fit_transform)
df.loc[0:,0:2] = df[[0,1,2]].apply(LabelEncoder().fit_transform)
#puts column back into dataframe
推荐阅读
- python - 使用 python 字典和列表元素创建列表项
- mips - 如何阻止我的 MIPS .data 部分的 char 变量被覆盖?
- html - ECONNRESET,Node.js Web 应用程序中的 MongoNetworkError
- java - Java 共享(交叉)依赖管理
- python-2.7 - 如何在 spyder 上安装 IB API?
- eclipse-plugin - Eclipse plugin to associate a file extension to the HTML editor
- python - ruamel.yaml:如何在顶层和其他元素内添加新元素
- java - 龙目岛与来自camelCase的Jackson Deserializer
- python - 如果与列表中每个字典中一个键的值匹配,则将新键添加到具有来自不同字典的值的字典列表
- ios - 将 uipagecontrol 连接到我的整个 uicollectionview,而不是连接到单个单元格