Замените Nan на 0 там, где отсутствует элемент данных в кадре данных. - PullRequest
0 голосов
/ 15 ноября 2018

Я работаю над набором данных с пропущенными значениями.Заголовок набора данных выглядит следующим образом:

+1 1:0.2 2:0.7 3:-1.2 4:0.5
-1 1:0.9 3:0.1 4:0.8
-1 1:-0.1 2:0.1 4:1.0
+1 2:0.6 3:-1.0

Первый столбец - это метка данных, а число перед двоеточием - индекс объекта.Некоторые функции отсутствуют в некоторых строках.Поэтому, когда я импортирую данные, используя следующий код,

df = pandas.read_csv('dataset',header=None,sep = '\s+|:',engine='python',dtype=float)

, я получаю кадр данных, похожий на

    0       1       2       3       4       5       6       7       8
0   1.0     1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   -1.0    1.0     0.9     3.0     0.1     4.0     0.8     NaN     NaN
2   -1.0    1.0     -0.1    2.0     0.1     4.0     1.0     NaN     NaN
3   1.0     2.0     0.6     3.0     -1.0    NaN     NaN     NaN     NaN

. Я хочу заменить NaN на 0 в правильном месте.Но если я использую df.fillna(0), я заменю NaN в конце каждой строки, которая выглядит как

    0       1       2       3       4       5       6       7       8
0   1.0     1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   -1.0    1.0     0.9     3.0     0.1     4.0     0.8     0.0     0.0
2   -1.0    1.0     -0.1    2.0     0.1     4.0     1.0     0.0     0.0
3   1.0     2.0     0.6     3.0     -1.0    0.0     0.0     0.0     0.0

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

    0       1       2       3       4       5       6       7       8
0   1.0     1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   -1.0    1.0     0.9     0.0     0.0     3.0     0.1     4.0     0.8
2   -1.0    1.0     -0.1    2.0     0.1     0.0     0.0     4.0     1.0
3   1.0     0.0     0.0     2.0     0.6     3.0     -1.0    0.0     0.0

Так что после того, как я опустил индекс, у меня должно было быть

    0       1       2       3       4     
0   1.0     0.2     0.7     -1.2    0.5
1   -1.0    0.9     0.0     0.1     0.8
2   -1.0    -0.1    0.1     0.0     1.0
3   1.0     0.0     0.6     -1.0    0.0

1 Ответ

0 голосов
/ 15 ноября 2018

Проблема не в заполнении значений N / A, как @BurningKarl предлагает в комментариях, проблема заключается в попытке прочитать файл с read_csv, который никоим образом не является файлом в формате csv или csv. Скорее всего, вам придется проанализировать этот файл по-другому.

Если это поможет вам начать работу, ниже я разместил фрагмент, который показывает, как получить данные, отформатированные для ввода в правильный фрейм данных, в соответствии с тем, что, по вашему мнению, вам нужно. Если вы можете проанализировать ваш файл с помощью file.readlines в списке словарей, вы можете просто обернуть это в конструкторе DataFrame. (Обратите внимание, что этот синтаксический анализ, вероятно, потребует некоторых усилий, чтобы получить его правильно)

x=[{0:1,1:0.2, 2:0.7, 3:-1.2, 4:0.5},
{0:-1,1:0.9, 3:0.1, 4:0.8},
{0:-1,1:-0.1, 2:0.1, 4:1.0},
{0:1,2:0.6, 3:-1.0}]

pd.DataFrame(x)

дает вам

    0    1       2      3       4
0   1    0.2     0.7    -1.2    0.5
1   -1   0.9     NaN    0.1     0.8
2   -1   -0.1    0.1    NaN     1.0
3   1    NaN     0.6    -1.0    NaN

и тогда вы можете просто заполнить (0), как вы пытались до этого

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