2016-07-05 8 views
1

いくつかのデータを正規化しようとしています。私のデータフレームでは、列が同じ接頭辞で始まる場合、それらは一緒に属しています(ab_000ab_001は一緒に属しますが、ac_000は前の2つに属しません)。だから私はl1の正規化で所属する列を正規化しようとしています。このために、私が書いた:Python - 文字列の一致を評価する際の型エラー

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 

しかし、コメントでマークされた行で、私はエラーを取得:

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

私はちょうどそれを返す

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

実行した場合をFalse、エラーはありません。私は何が欠けていますか?

[編集] エラーが発生する前に、しばらく実行されます。

enter image description here

サンプルデータ:あなたのdata.columnsの一つはint型であるように見えます

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

これらの列はすべてコレクションであり、 'int'ではありませんか?エラーを出している行の直前に 'print(data.columns [j] [:2])'を挿入してみてください。 – SuperBiasedMan

+1

はい、私は肯定的です、それはしばらく実行さえします。私は写真でポストを更新します。 –

+0

この機能で処理されているデータのサンプルを提供することはできますか? – Jaxian

答えて

0

比較の前にprint(data.columns[j][:2])権利を追加することで、私は出力を得ます。

getitem()は、演算子[]を使用すると呼び出されます。

例えば、tmp = columns[2]の場合、columns.__getitem__(2)が呼び出されます。