2017-01-27 1 views
-2

Ich habe den Datenrahmen best_scores contaniningconvert Datenrahmen Typ Objekt Wörterbuch

 subsample colsample_bytree learning_rate max_depth min_child_weight \ 
3321  0.8    0.8   0.3   2    3 

      objective scale_pos_weight silent 
3321 binary:logistic   1.846154  1 

ich es in einem Wörterbuch konvertieren möchte params wie:

params 
{'colsample_bytree': 0.8, 
    'learning_rate': 0.3, 
    'max_depth': 2, 
    'min_child_weight': 3, 
    'objective': 'binary:logistic', 
    'scale_pos_weight': 1.8461538461538463, 
    'silent': 1, 
    'subsample': 0.8} 

aber wenn ich laufe

best_scores.to_dict(orient='records') 

Ich bekomme:

[{'colsample_bytree': 0.8, 
    'learning_rate': 0.3, 
    'max_depth': 2, 
    'min_child_weight': 3, 
    'objective': 'binary:logistic', 
    'scale_pos_weight': 1.8461538461538463, 
    'silent': 1L, 
    'subsample': 0.8}] 

Können Sie bitte helfen?

+3

können Sie nicht tun 'best_scores.to_dict (orient = 'Datensätze') [0]' –

+0

@ Jean-FrançoisFabre Dank! jede Ahnung, warum leise ist L und nicht int? – gabboshow

+0

wahrscheinlich, weil es mit einem langen int initialisiert wurde. Sie müssen Python 2 verwenden. Sie können zurück in int konvertieren. Mach dir keine Sorgen, es funktioniert gut (nur mehr Speicher, das ist alles) –

Antwort

1

Sie erhalten eine Liste von Wörterbüchern, da Sie eine DataFrame in dict konvertieren, die möglicherweise mehrere Zeilen haben kann. Jede Zeile wäre ein Eintrag in der Liste.

Abgesehen von der erwähnten Lösung, um einfach den ersten Eintrag auszuwählen, ist der ideale Weg, um das zu erreichen, was Sie wollen, ein Series anstelle eines DataFrame zu verwenden. Auf diese Weise nur ein dict zurückgegeben:

In [2]: s = pd.Series([1, 2 ,3], index=['a', 'b', 'c']) 

In [3]: s.to_dict() 
Out[3]: {'a': 1, 'b': 2, 'c': 3} 

In [4]: d = pd.DataFrame(s).T 

In [5]: d 
Out[5]: 
    a b c 
0 1 2 3 

In [6]: d.iloc[0] 
Out[6]: 
a 1 
b 2 
c 3 
Name: 0, dtype: int64 

In [7]: d.iloc[0].to_dict() 
Out[7]: {'a': 1, 'b': 2, 'c': 3}