2016-07-05 12 views
1

Ich versuche, einige Daten zu normalisieren. Wenn die Spalten in meinem Datenfeld mit demselben Präfix beginnen, gehören sie zusammen (z. B. ab_000 und ab_001 gehören zusammen, jedoch gehört ac_000 nicht zu den vorherigen zwei). Also versuche ich die zugehörigen Spalten mit einer 1-Normalisierung zu normalisieren.Python - Typ Fehler beim Auswerten der Zeichenfolge Übereinstimmung

def normalize(df): 
    data = df.copy() 
    to_work_with = [] 
    for i in range(0, len(data.columns) - 1): 
     for j in range(0, len(data.columns) -1): 
      if data.columns[i][:2] == data.columns[j][:2]: # error here 
       to_work_with.append(data.columns[j]) 
     data[to_work_with] = nr(data[to_work_with],axis=1, norm='l1') 
     to_work_with = [] 
    return data 

jedoch in der von dem Kommentar markierten Linie, ich eine Fehlermeldung erhalten: Dazu habe ich geschrieben

TypeError: 'int' object has no attribute '__getitem__' 

Wenn ich laufe nur

data.columns[1][:2] == data.columns[2][:2] 

Es gibt eine False, kein Fehler. Was vermisse ich?

[EDIT] Scheinbar läuft es für eine Weile, bevor der Fehler erzeugt wird. Durch das Hinzufügen eines print(data.columns[j][:2]) direkt vor dem Vergleich, bekomme ich die Ausgabe:

enter image description here

Beispieldaten:

aa_000 ab_000 ac_000 ad_000 ae_000 af_000 af_001 af_002 af_003 af_004 ... ed_004 ed_005 ed_006 ed_007 ed_008 ed_009 ee_000 ef_000 eg_000 classN 
0 76698 NaN 2.130706e+09 280.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 493384.0 721044.0 469792.0 339156.0 157956.0 73224.0 0.0 0.0 0.0 -1 
1 33058 NaN 0.000000e+00 NaN 0.0 0.0 0.0 0.0 0.0 0.0 ... 178064.0 293306.0 245416.0 133654.0 81140.0 97576.0 1500.0 0.0 0.0 -1 
2 41040 NaN 2.280000e+02 100.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 159812.0 423992.0 409564.0 320746.0 158022.0 95128.0 514.0 0.0 0.0 -1 
+2

Sind Sie sicher, dass alle diese Spalten Sammlungen sind und nicht 'int'? Versuchen Sie, 'print (data.columns [j] [: 2])' direkt vor der Zeile einzufügen, die Fehler verursacht. – SuperBiasedMan

+1

Ja, ich bin positiv, es läuft sogar eine Weile. Ich werde den Beitrag mit einem Bild aktualisieren. –

+0

Können Sie uns ein Muster der Daten zur Verfügung stellen, die in der Funktion verarbeitet werden? – Jaxian

Antwort

0

Es sieht aus wie eine Ihrer data.columns Typ int ist.

getitem() wird aufgerufen, wenn Sie den Operator [] verwenden.

Zum Beispiel, wenn tmp = columns[2], columns.__getitem__(2) aufgerufen wird.

Verwandte Themen