Panda DataFrame在两列中合并唯一值以进行OrdinalEncoder拟合

时间:2018-12-18 21:04:52

标签: pandas dataframe

我有Titanic数据集,而我想使用的数据框中的列是“ Embarked”和“ Sex”。

df['Embarked']df['Sex']具有唯一值:Embarked['C','Q','S']Sex['male','female']

我想做的是创建一个如下列表:

[['S','female'],['S','male'],['C','female'],['c','male'],['Q','female'],['Q','male']]

我需要列表格式的唯一值组合,以便可以传递给OrdinalEncoder以适应。

Scikit Learn OrdinalEncoder示例:

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder()
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)

enc.categories_

enc.transform([['Female', 3], ['Male', 1],['Female',2],['Male',3]])

编码器转换仅需list

2 个答案:

答案 0 :(得分:0)

一种方法是:

list_1 = ['C','Q','S']
list_2 = ['male','female']
X = [[x, y] for x in list_1 for y in list_2]

答案 1 :(得分:0)

如果您要从数据框中两列的唯一值中查找产品,然后将它们转换为列表,那么就可以做到!

import pandas as pd
from itertools import product

data = pd.DataFrame([['Q', 'male'], ['Q', 'male'], ['S', 'female'], 
                     ['S', 'female'], ['S', 'male'], ['C', 'female'], 
                     ['C', 'female'], ['C', 'male'], ['C', 'male']],
                    columns=['Embarked', 'Sex'])

print([list(x) for x in product(data['Embarked'].unique(), data['Sex'].unique())])

itertools.product为您提供一系列可迭代项的笛卡尔积。这里的可迭代项是通过在DataFrame的每个列上调用Series.unique()来获取其唯一值而创建的列表。

最后,list comprehensionitertools.product的典型的元组列表返回变成列表列表。