Как я могу преобразовать форму ndarray (32 на xxx) в один столбец данных, при этом отбрасывая последние десять объектов этого массива - PullRequest
0 голосов
/ 31 марта 2020

После запуска модели бинарной классификации NLP над набором данных с размером пакета 32 у меня есть nparray прогнозов размера 32 на 300, а последний пакет имеет размер 24. Я пытаюсь изменить эти значения в кадре данных.

predictions.append(logits.argmax(1))
[array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
       0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), array([0, 1, 0, 0, 0, 0, 0, 0............

однако, когда я пытаюсь преобразовать его в фрейм данных,


df.labels = pd.DataFrame(predictions)
df.labels.head()

это то, что я получаю

0    0.0
1    0.0
2    0.0
3    0.0
4    0.0
Name: labels, dtype: float64
  1. я хочу, чтобы значения были 1 или 0 целыми числами, а не числами с плавающей запятой
  2. конечная партия данных из 32 имеет NaN от 24 до 32 вместо пустых

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Если ваш столбец содержит NaN, он всегда будет иметь тип float. Таким образом, наличие значений NaN объясняет, почему столбец равен float.

У вас должна быть проблема измерения, ваша переменная предсказаний двумерная, 32 x 10, сначала вы должны сгладить ее, а затем добавить 24 элемента, см. Документацию здесь :

predictions = predictions.flatten()

to_append = logits.argmax(1) # this is your array with 24 elements 
predictions = predictions.append(to_append)

Здесь происходит следующее: когда вы добавляете строку из 24 элементов в DataFrame с 32 столбцами, последние столбцы с 23 по 32 будут существуют и будут автоматически заполнены NaN. См. Некоторые примеры здесь и здесь .

Почему вы хотите преобразовать NaN в пробел? Если пробел означает пустую строку, вы не должны этого делать, так как вы будете смешивать float и string в вашем столбце.

Если вы хотите целочисленные значения. Вы должны сделать вложение значений NaN с постоянным целочисленным значением (скажем, 888):

df = df.fillna(888)

Затем вы можете преобразовать все в int, используя функцию astype :

df = df.astype('int16')
0 голосов
/ 03 апреля 2020

Это было то, что работало для меня.

predictions.append(logits.argmax(1))
flat_predictions = np.concatenate(predictions, axis=0)
df = pd.DataFrame(data=flat_predictions, columns=["gold_label",])

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