2017-02-03 9 views
2

Fasst Ich bin mit Python 3.6 und Pandas 0.19.2 in PyCharm Community Edition 2016.03.02 und ich versuche, eine Reihe von Zeilen in meinem Datenrahmen, um sicherzustellen, fügt Zunächst sieht aus, als mein Datenrahmen auf 1eine Pandas Dataframe

up folgt:

hello  world  label0 label1 label2 
abc  def  1.0  0.0  0.0 
why  not  0.33  0.34  0.33 
hello  you  0.33  0.38  0.15 

ich gehen Sie wie folgt vor:

dieser Code
# get list of label columns (all column headers that contain the string 'label') 
label_list = df.filter(like='label').columns 

# ensure every row adds to 1 
if (df[label_list].sum(axis=1) != 1).any(): 
    print('ERROR') 

Leider ist für mich nicht funktioniert. Was passiert, ist, dass ich, anstatt meine Zeilen zu summieren, nur den Wert der ersten Spalte in meinen gefilterten Daten erhalte. Mit anderen Worten: df[label_list].sum(axis=1) kehren:

0  1.0 
1  0.33 
2  0.33 

Dies sollte trivial sein, aber ich kann einfach nicht herausfinden, was ich falsch mache. Danke im Voraus für die Hilfe!

UPDATE:

Dies ist ein Auszug aus meinen ursprünglichen Daten, nachdem ich für die Etiketten Spalt gefiltert habe:

label0 label1 label2 label3 label4 label5 label6 label7 label8 
1 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
2 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
3 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
4 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
5 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
6 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
7 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
8 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 
9 0.34 0.1 0.1 0.1 0.2 0.4 0.1 0.1 1.2 

Mein Code von oben immer noch nicht funktioniert, und ich habe immer noch keine Ahnung, warum . Wenn ich meinen Code in der Python-Konsole ausführe funktioniert alles einwandfrei, aber wenn ich meinen Code in Pycharm 2016.3.2 ausführe, gibt label_data.sum(axis=1) einfach die Werte der ersten Spalte zurück.

+0

Was gibt 'label_list = df.filter (like = 'label'). Columns' zurück? – jezrael

+0

Es scheint, dass etwas mit Spaltennamen nicht stimmt, überprüfen Sie es mit 'print (df.columns.tolist())' – jezrael

+0

Für Ihr Beispiel gibt es zurück '['Hallo', 'Welt', 'Label0', 'Label1', 'label2'] ' – jezrael

Antwort

0

mein Datentyp nicht konsistent Es stellt sich heraus war. Ich habe astype(float) verwendet und die Dinge ausgearbeitet.

0

Mit Ihren Beispieldaten für mich funktioniert es. Versuchen Sie einfach Ihre Probe zu reproduzieren eine neue Spalte hinzugefügt check die Summe zu steuern:

In [3]: df 
Out[3]: 
    hello world label0 label1 label2 
0 abc def 1.00 0.00 0.00 
1 why not 0.33 0.34 0.33 
2 hello you 0.33 0.38 0.15 

In [4]: df['check'] = df.sum(axis=1) 

In [5]: df 
Out[5]: 
    hello world label0 label1 label2 check 
0 abc def 1.00 0.00 0.00 1.00 
1 why not 0.33 0.34 0.33 1.00 
2 hello you 0.33 0.38 0.15 0.86 

In [6]: label_list = df.filter(like='label').columns 

In [7]: label_list 
Out[7]: Index([u'label0', u'label1', u'label2'], dtype='object') 

In [8]: df[label_list].sum(axis=1) 
Out[8]: 
0 1.00 
1 1.00 
2 0.86 
dtype: float64 

In [9]: if (df[label_list].sum(axis=1) != 1).any(): 
    ...:  print('ERROR') 
    ...:  
ERROR 
+0

Sie haben Recht. Der Code läuft in der Python-Konsole einwandfrei. – MRR