2016-06-26 2 views
1

safetyというクラスの20の最も有益な機能をプリントアウトするためにパイプラインを繰り返しています。pandasデータフレームヘッダー行がforステートメントを繰り返さないようにする

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) 

私は、唯一のヘッダーで出力されたデータフレームをしたいが、代わりに私はそれが[I]を反復処理ですので、何度も何度もヘッダーを繰り返すように見えるこの出力を返しています。

私は同じよう data frameを返すにはどうすればよい
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 

:私はプリント(D、F)を返すとき

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

今、それは以下のトップの値を示しています

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] 

私が調査いくつか同様の質問herehere、およびhereが、私の質問に直接対処していないようです。

ありがとうございました。

答えて

1

私はいくつかのデータをシミュレートしてみてください、あなたはループの各ステップでLlistを追加し、最後Lからdfを作成することができます。

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) 

サンプル:

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

は、あなたの助けに感謝します!あなたのcはリストですが、私のものはnumpy.ndarrayです。これは、実行時のエラーを説明しているかもしれません。「インデックス1169は、サイズ0の軸0に対して範囲外です。私はCをリストにする必要があると思いますか? – baldr009

+0

試してみることもできますが、ndarrayでもうまくいくと思います。最高ののは、fとcをndarraysに変更して試してみることです。 – jezrael

関連する問題