Я хочу пометить набор данных для сеанса машинного обучения. Однако метки находятся в разных файлах, и я хочу пометить набор данных на основе параметров этих файлов. Чтобы проиллюстрировать, что я имею в виду, вот набор данных, который нужно пометить:
t Alpha abeta e2e rg rg2 label <br />
NaN 0.000000 0.402192 3.661472 0.599572 0.606992 0.636918 0<br />
NaN 1.000000 0.411551 3.697878 0.580192 0.604391 0.624746 0<br />
NaN 2.000000 0.354966 3.408603 0.704422 0.622932 0.653885 0<br />
NaN 3.000000 0.359647 3.473973 0.681276 0.624507 0.656729 0<br />
NaN 4.000000 0.359812 3.614721 0.619767 0.619774 0.647542 0<br />
.. ... ... ... ... ... ... ...<br />
NaN 89996.000000 3.615310 0.297989 1.146213 0.640741 0.677973 0<br />
NaN 89997.000000 3.713637 0.220516 1.234041 0.653810 0.688303 0<br />
NaN 89998.000000 0.396679 3.474971 0.989340 0.662221 0.684493 0<br />
NaN 89999.000000 0.436573 3.428199 0.956533 0.668450 0.694100 0<br />
NaN 90000.000000 0.403127 3.315321 0.899330 0.686169 0.720799 0
Я понятия не имею, откуда берутся эти NaN, поскольку набор данных не содержит ничего, что может отображаться как NaN, но я проигнорировал проблема в надежде, что это не имеет значения, но я не уверен, что это правильно. Я использовал эту строку для чтения файла:
d=pd.read_csv("C:/Users/Casper/Downloads/data.xvg" ,sep=' ',skiprows=1,names=['t','Alpha','abeta','e2e','rg','rg2',],dtype=float)
В любом случае, я добавил после этого столбец «label» и заполнил его нулями, чтобы пустое состояние было заполнено позже. Один из файлов меток выглядит так: H0B0: 0 174.0 1 579.0 2 612.0 3 767.0 4 789.0 Есть еще одна проблема, первая строка пропускается. Обычно это не так уж плохо для таких больших обучающих данных, но некоторые файлы довольно маленькие, а в одном из них всего 1 строка, поэтому, когда я его читаю, он показывает только это:
Series([], dtype: float64)
Вот код, который я использовал для чтения файлов маркировки:
c1=pd.read_csv("C:/Users/Casper/Desktop/CLUSTER/H0B0.txt",sep=' ',dtype=float, lineterminator='\n')
c1.head()
c1= c1.stack().reset_index(drop=True)
Идея состоит в том, что если значения в файле соответствуют «t» набора данных, метка должна быть обновлена до H0B0. Например, если файл H0B0 имеет номер 200 400 600 et c. тогда строка, t которой равна 200 400 600 et c. должен быть помечен как H0B0. Так как таких файлов 20, каждый файл следует читать отдельно и каждую строку пометить. Кроме того, недостаточно чисел, чтобы покрыть все t, поэтому, если остались строки, которые еще не помечены, их следует пометить как «выбросы». Я пробовал много разных методов, последний из них, который я пробовал, был следующий:
for i in range(0, 90001):
for j in range(0,3339):
if d.iat[i,0]==c1.at[j,0]:
d.at[i,6]="H0B0"
J различается для каждого файла, так как каждый файл имеет разную длину, и этот фрагмент записывается 20 раз для каждого файла. Это дает ошибку
TypeError: _get_value() got multiple values for argument 'takeable'
Для маркировки выбросов я написал следующее:
for i in range(0,90001):
if d.iat[i,6]==0:
d.at[i,6]="outliar"
Это дает ошибку ValueError: невозможно переиндексировать с повторяющейся оси
I честно говоря, я в своем уме, потому что понятия не имею, что делаю неправильно и правильно ли я вообще что-то делаю. Любая помощь будет принята с благодарностью.