2016-07-05 47 views
1

我试图规范化一些数据。在我的数据框中,如果列以相同的前缀开头,它们属于一起(属于ab_000ab_001,但ac_000不属于前两者)。所以我试图用归一化归一化归属列。对于这一点,我已经写了: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,没有错误。我错过了什么?

[编辑] 在产生错误之前运行一段时间。通过比较之前增加一个print(data.columns[j][:2])正确的,我得到的输出:

enter image description here

的样本数据:

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's?尝试在提供错误的行之前插入'print(data.columns [j] [:2])'。 – SuperBiasedMan

+1

是的,我是积极的,它甚至会运行一段时间。我会用照片更新帖子。 –

+0

你能否向我们提供一个在函数中处理的数据样本? – Jaxian

回答

0

它看起来像你的data.columns之一是int类型。

getitem()在使用operator []时被调用。

例如,当调用tmp = columns[2],columns.__getitem__(2)时。