Я пытаюсь нормализовать некоторые данные. В моем фреймворке данных, если столбцы начинаются с того же префикса, они принадлежат друг другу (например, ab_000
и ab_001
принадлежат друг другу, однако ac_000
не относится к предыдущим двум). Поэтому я пытаюсь нормализовать принадлежащие столбцы с нормализацией 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
, без ошибок. Что мне не хватает?
[РЕДАКТИРОВАТЬ] Видимо, он работает некоторое время до возникновения ошибки. Добавляя print(data.columns[j][:2])
прямо перед сравнением, я получаю выход:
Sample данные:
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
Вы уверены, что все эти столбцы являются коллекциями, а не 'int'? Попробуйте вставить 'print (data.columns [j] [: 2])' прямо перед строкой, которая дает ошибки. – SuperBiasedMan
Да, я уверен, он даже работает некоторое время. Я обновляю сообщение с рисунком. –
Можете ли вы предоставить нам образец данных, которые обрабатываются в функции? – Jaxian