2016-08-06 14 views
0

Eine kurze Frage, wie ich zur Zeit von R bin Wechsel für einige Projekte Pandas:Make-Konsole freundliche Saite ein brauchbarer Pandas Datenrahmen Python

Ich erhalte die folgende Druckausgabe von metrics.classification_report von sci-kit learn:

    precision recall f1-score support 

     0   0.67  0.67  0.67   3 
     1   0.50  1.00  0.67   1 
     2   1.00  0.80  0.89   5 

avg/total  0.83  0.78  0.79   9 

Ich möchte diese (und ähnliche) als Matrix/Datenframe verwenden, damit ich sie extrahieren kann, sagen wir die Genauigkeit der Klasse 0.

In R würde ich die erste "Spalte" geben ein Name wie "outcome_class" und dann unterteilen Sie es: my_dataframe[my_dataframe$class_outcome == 1, 'precision']

Und ich kann dies in Pandas tun, aber die dataframe, die ich verwenden möchte, ist einfach eine Zeichenfolge see sckikit's doc

Wie kann ich die Tabellenausgabe hier, um ein nutzbares Datenrahmen in Pandas machen?

Antwort

2

Weisen Sie auf eine Variable, s:

s = classification_report(y_true, y_pred, target_names=target_names) 

Oder direkt:

s = ''' 
      precision recall f1-score support 

    class 0  0.50  1.00  0.67   1 
    class 1  0.00  0.00  0.00   1 
    class 2  1.00  0.67  0.80   3 

avg/total  0.70  0.60  0.61   5 
''' 

verwenden, die als String-Eingang für StringIO:

import io # For Python 2.x use import StringIO 
df = pd.read_table(io.StringIO(s), sep='\s{2,}') # For Python 2.x use StringIO.StringIO(s) 
df 
Out: 
      precision recall f1-score support 
class 0   0.5 1.00  0.67  1 
class 1   0.0 0.00  0.00  1 
class 2   1.0 0.67  0.80  3 
avg/total  0.7 0.60  0.61  5 

Jetzt können Sie es in Scheiben schneiden wie ein R data.frame:

df.loc['class 2']['f1-score'] 
Out: 0.80000000000000004 

Hier sind Klassen der Index des DataFrame. Sie können reset_index() verwenden, wenn Sie es als reguläre Spalte verwenden möchten: