2016-06-26 2 views
1

Je parcours itérativement le pipeline pour imprimer les 20 caractéristiques les plus informatives d'une classe appelée safety.Empêcher la répétition de la ligne d'en-tête de trame de données pandas pour l'instruction

classnum_saf = 3 
inds = np.argsort(clf_3.named_steps['clf'].coef_[classnum_saf, :])[-20:] 
for i in inds: 
    f = feature_names[i] 
    c = clf_3.named_steps['clf'].coef_[classnum_saf, [i]] 
    print(f,c) 
    output = {'features':f, 'coefficients':c} 
    df = pd.DataFrame(output, columns = ['features', 'coefficients']) 
    print(df) 

Je veux une trame de données avec un seul en sortie tête, mais je retourne cette sortie qui semble répéter l'en-tête, encore et encore car il est itérer [i].

1800 [-8.73800344] 
    features coefficients 
    0  1800  -8.738003 
    hr [-8.73656027] 
    features coefficients 
    0  hr  -8.73656 
    wa [-8.7336777] 
    features coefficients 
    0  wa  -8.733678 
    1400 [-8.72197545] 
    features coefficients 
    0  1400  -8.721975 
    hrwa [-8.71952656] 
    features coefficients 
    0  hrwa  -8.719527 
    perimeter [-8.71173264] 
    features coefficients 
    0 perimeter  -8.711733 
    response [-8.67388885] 
    features coefficients 
    0 response  -8.673889 
    analysis [-8.65460329] 
    features coefficients 
    0 analysis  -8.654603 
    00 [-8.58386785] 
    features coefficients 
    0  00  -8.583868 
    raw [-8.56148006] 
    features coefficients 
    0  raw  -8.56148 
    run [-8.51374794] 
    features coefficients 
    0  run  -8.513748 
    factor [-8.50725691] 
    features coefficients 
    0 factor  -8.507257 
    200 [-8.50334896] 
    features coefficients 
    0  200  -8.503349 
    file [-8.39990841] 
    features coefficients 
    0  file  -8.399908 
    pb [-8.38173753] 
    features coefficients 
    0  pb  -8.381738 
    mar [-8.21304343] 
    features coefficients 
    0  mar  -8.213043 
    1998 [-8.21239836] 
    features coefficients 
    0  1998  -8.212398 
    signal [-8.02426499] 
    features coefficients 
    0 signal  -8.024265 
    area [-8.01782987] 
    features coefficients 
    0  area  -8.01783 
    98 [-7.3166918] 
    features coefficients 
    0  98  -7.316692 

Comment puis-je retourner un data frame comme:

  features  coefficients 
    0  1800   -8.738003 
    ..  ...   ... 
    18  area   -8.01783 
    19  98   -7.316692 

En ce moment, quand je reviens impression (d, f), il montre les principales valeurs suivantes:

1800 [-8.73800344] 
    hr [-8.73656027] 
    wa [-8.7336777] 
    1400 [-8.72197545] 
    hrwa [-8.71952656] 
    perimeter [-8.71173264] 
    response [-8.67388885] 
    analysis [-8.65460329] 
    00 [-8.58386785] 
    raw [-8.56148006] 
    run [-8.51374794] 
    factor [-8.50725691] 
    200 [-8.50334896] 
    file [-8.39990841] 
    pb [-8.38173753] 
    mar [-8.21304343] 
    1998 [-8.21239836] 
    signal [-8.02426499] 
    area [-8.01782987] 
    98 [-7.3166918] 

Je fait des recherches quelques questions similaires here, here, et here, mais il ne semble pas directement répondre à ma question.

Nous vous remercions à l'avance, encore à apprendre ici.

Répondre

1

J'essaie de simuler des données et vous pouvez ajouter list-L à chaque étape en boucle et créer dernier df de L:

L = [] 
classnum_saf = 3 
inds = np.argsort(clf_3.named_steps['clf'].coef_[classnum_saf, :])[-20:] 
for i in inds: 
    f = feature_names[i] 
    c = clf_3.named_steps['clf'].coef_[classnum_saf, [i]] 
    print(f,c) 
    #add [0] for removing list of list (it works nice if len of f[i] == 1) 
    L.append([c[i], f[i][0]]) 

df = pd.DataFrame(L, columns = ['features', 'coefficients']) 
print(df) 

Exemple:

import pandas as pd 

f = [[1],[2],[3]] 
c = ['a','b','c'] 

L = [] 
for i in range(3): 
# print(f[i],c[i]) 
    #swap c and f 
    L.append([c[i], f[i][0]]) 

print (L) 
[['a', 1], ['b', 2], ['c', 3]] 

df = pd.DataFrame(L, columns = ['features', 'coefficients']) 
print(df) 

    features coefficients 
0  a    1 
1  b    2 
2  c    3 
+0

vous remercions de votre aide! votre c est une liste alors que la mienne est un numpy.ndarray. Cela peut expliquer mon erreur lors de l'exécution, "l'index 1169 est hors limites pour l'axe 0 avec la taille 1". Je suppose que je dois transformer c en une liste? – baldr009

+0

Vous pouvez essayer, mais je pense que cela peut fonctionner aussi bien avec ndarray. Le mieux est d'essayer de changer f et c en ndarrays et de le tester. – jezrael