是否有可能从pandas.get_dummies获取功能名称?

时间:2016-05-06 16:27:42

标签: python pandas graphviz sklearn-pandas

我想知道是否有可能获得pandas.get_dummies的功能名称,所以我可以将它传递给export_graphviz。我使用get_dummies对我的数据集进行编码以获取sklearn DecisionTreeClassifier。当我导出树时,我希望节点的输出更容易阅读。

提前谢谢!

编辑:

这是我想要完成的一个例子:

body {
    margin: 0;
    padding: 0;
    text-align: center;
}
#container {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    display: flex;
    justify-content: center;
}

我希望能够使用feature_names参数

标记要素
#Concatenate the sets
concated = pd.concat([train_file, test_file])

#Get the encoded set
concated_encoded = pd.get_dummies(concated, columns=cols_to_retain)
#Separate the sets
train = concated_encoded[concated_encoded["Train"] == 1]
test = concated_encoded[concated_encoded["Train"] == 0]
train = train.drop(["Train"], axis=1)
test = test.drop(["Train"], axis=1)

X_train, X_val, y_train, y_val = train_test_split(train, train_outcome, test_size=0.15)

clf = DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(X_train,y_train)
y_pred_val = clf.predict(X_val)

import StringIO
import pydot
dot_data = StringIO.StringIO() 

3 个答案:

答案 0 :(得分:0)

使用pd.get_dummies时,新列会接收与数据框中该要素的值对应的名称。在文档的以下示例中,您可以看到虚拟列如何接收名称<prefix>_<value>

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                    'C': [1, 2, 3]})
>>> pd.get_dummies(df, prefix=['col1', 'col2'])
   C  col1_a  col1_b  col2_a  col2_b  col2_c
0  1       1       0       0       1       0
1  2       0       1       1       0       0
2  3       1       0       0       0       1

因此您可能只需要使用:

feature_names = list(train.columns)
export_graphviz(clf, out_file=dot_data, feature_names=feature_names)

答案 1 :(得分:0)

这是另一个使用prefix get_dummies()参数的想法。下面的单个字符串用于为创建的所有要素名称添加前缀。你可以制定一个更复杂的方案,因为prefix也可以拿一个字典或列表。

visa_data_copy = pd.get_dummies(visa_data_copy, columns=categorical_cols, prefix='UID_001')

added_dummy_cols = [item for item in list(visa_data_copy.columns.values) if item.startswith('UID_001')]

因此added_dummy_cols最终将成为get_dummies()为您添加的列名列表,您可以在以后随时使用它。

答案 2 :(得分:0)

pd.get_dummies实际上返回一个DataFrame(或sparseDataFrame)。对于DataFrame df,您可以像使用每个df.columns一样,通过请求DataFrame对象的columns属性来访问列(或特征)名称,如以下示例所示:

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                'C': [1, 2, 3]})  #creates sample dataframe

>>> df_dummified = pd.get_dummies(df)  #returns new coded dataframe

>>> columns = df_dummified.columns  #returns index object holding new column names

>>> columns.tolist()  #converts the index object to a list

['C', 'A_a', 'A_b', 'B_a', 'B_b', 'B_c']