Python 熊猫中字符串特征的编码

Python 熊猫中字符串特征的编码,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我有如下数据帧 train_df 'type', 'manufacturer', 'year', 'num_doors' sedan, bmw, 2012, 4 couple, audi, 2014, 2 and so on 并以类似格式测试_df 所有的特性都是分类特性一些字符串,一些int,我想把它们编码成分类变量 在pandas/sklearn中处理这些分类变量的好方法是什么 此外,一旦转换应用于列车df。。我想根据这些编码对测试数据进行编码?在读取数据时,将数据类型指定为categor

我有如下数据帧

train_df
'type', 'manufacturer', 'year', 'num_doors'
sedan, bmw, 2012, 4
couple, audi, 2014, 2
and so on
并以类似格式测试_df 所有的特性都是分类特性一些字符串,一些int,我想把它们编码成分类变量

在pandas/sklearn中处理这些分类变量的好方法是什么
此外,一旦转换应用于列车df。。我想根据这些编码对测试数据进行编码?

在读取数据时,将数据类型指定为category,使每一列本质上都是分类的

df = pd.read_csv('file.csv', dtype='category')
df

     type manufacturer  year num_doors
0   sedan          bmw  2012         4
1  couple         audi  2014         2
如果您只想转换特定的列子集,类似这样的操作可以-

f = dict.fromkeys(['type', 'manufacturer', ...], 'categorical')
将f传递给dtype


读取数据时,将dtype指定为类别,以使每一列本质上都是分类的

df = pd.read_csv('file.csv', dtype='category')
df

     type manufacturer  year num_doors
0   sedan          bmw  2012         4
1  couple         audi  2014         2
如果您只想转换特定的列子集,类似这样的操作可以-

f = dict.fromkeys(['type', 'manufacturer', ...], 'categorical')
将f传递给dtype


实现这一点有多种方法:

如果您可以使用scikit scikit learn v0.20.dev0的开发版本,那么这里有一个礼物,它正是您想要的

例如:

from sklearn.preprocessing import CategoricalEncoder
enc = CategoricalEncoder(handle_unknown='ignore')
X = pd.read_csv('file.csv')
enc.fit(X)

enc.categories_
# Output: 
# [array(['sedan', 'couple'], dtype=object), 
   array(['bmw', 'audi'], dtype=object)]
   array([2012, 2014], dtype=object)]
   ... 
   ...

如果您无法使用该版本,并且希望使用当前的稳定版本,则有多种方法可以实现此目的:

如果您可以使用scikit scikit learn v0.20.dev0的开发版本,那么这里有一个礼物,它正是您想要的

例如:

from sklearn.preprocessing import CategoricalEncoder
enc = CategoricalEncoder(handle_unknown='ignore')
X = pd.read_csv('file.csv')
enc.fit(X)

enc.categories_
# Output: 
# [array(['sedan', 'couple'], dtype=object), 
   array(['bmw', 'audi'], dtype=object)]
   array([2012, 2014], dtype=object)]
   ... 
   ...

如果您无法使用它,并且希望使用当前的稳定版本,您知道哪些列是分类的吗?@cᴏʟᴅsᴘᴇᴇᴅ: 是 啊虽然只有10个可能的值,但它可以使用..查找一个热编码并获得_假人-两个sklearn函数IIRC@paultget_dummies来自pandas,而不是scikit Learn。你知道哪些栏目是分类的吗?@cᴏʟᴅsᴘᴇᴇᴅ: 是 啊虽然只有10个可能的值,但它可以使用..查找一个热编码并获得_假人-两个sklearn函数IIRC@paultget_假人来自熊猫,而不是scikit learn