в конце каждой строки отображаются пропущенные значения - PullRequest
0 голосов
/ 15 ноября 2018

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

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

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

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

Я получаю, что фрейм данных выглядит так:

    0       1       2       3       4       5       6       7
0   1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   1.0     0.9     3.0     0.1     4.0     0.8     NaN     NaN
2   1.0     -0.1    2.0     0.1     4.0     1.0     NaN     NaN
3   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
0   1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   1.0     0.9     0.0     0.0     3.0     0.1     4.0     0.8
2   1.0     -0.1    2.0     0.1     0.0     0.0     4.0     1.0
3   0.0     0.0     2.0     0.6     3.0     -1.0    0.0     0.0

1 Ответ

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

Вы можете использовать модуль csv для создания списка словарей, а затем передать его конструктору pd.DataFrame. Наконец, используйте fillna, чтобы заполнить нулевые значения 0.

from io import StringIO
import csv
import pandas as pd

x = StringIO("""1:0.2 2:0.7 3:-1.2 4:0.5
1:0.9 3:0.1 4:0.8
1:-0.1 2:0.1 4:1.0
2:0.6 3:-1.0""")

# replace x with open('file.csv', 'r')
with x as fin:
    L = [dict(i.split(':') for i in line) for line in csv.reader(fin, delimiter=' ')]

df = pd.DataFrame(L, dtype=float).fillna(0)

print(df)

     1    2    3    4
0  0.2  0.7 -1.2  0.5
1  0.9  0.0  0.1  0.8
2 -0.1  0.1  0.0  1.0
3  0.0  0.6 -1.0  0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...