Проблемы с маркировкой данных с помощью условия if - PullRequest
0 голосов
/ 09 июля 2020

Я хочу пометить набор данных для сеанса машинного обучения. Однако метки находятся в разных файлах, и я хочу пометить набор данных на основе параметров этих файлов. Чтобы проиллюстрировать, что я имею в виду, вот набор данных, который нужно пометить:

              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 честно говоря, я в своем уме, потому что понятия не имею, что делаю неправильно и правильно ли я вообще что-то делаю. Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...