Python изменить формат списка со строками на плавающие в столбце - PullRequest
0 голосов
/ 11 апреля 2019

Изменить список со строками

Пробовал np.array:

with open(file_to_open) as f:
    for line in f:
        # split the line
        line = line.strip()
        columns = line.split(",")
        if columns[0] == "1":
               x_train.append(line)
        if columns[0] == "2":
             y_train.append(line)
                #print(line, end='')
        print( x_train)

Я получаю этот результат:

['1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065', '1,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050', '1,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185', '1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480', '1,13.24,2.59,2.87,21,118,2.8,2.69,.39,1.82,4.32,1.04,2.93,735', '1,14.2,1.76,2.4 ....]

Но я бы хотел получить таким образом:

1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065
1,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050
1,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185
1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480
1,13.24,2.59,2.87,21,118,2.8,2.69,.39,1.82,4.32,1.04,2.93,735
1,14.2,1.76,2.45,15.2,112,3.27,3.39,.34,1.97,6.75,1.05,2.85,1450
1,14.39,1.87,2.45,14.6,96,2.5,2.52,.3,1.98,5.25,1.02,3.58,1290
1,14.06,2.15,2.61,17.6,121,2.6,2.51,.31,1.25,5.05,1.06,3.58,1295
1,14.83,1.64,2.17,14,97,2.8,2.98,.29,1.98,5.2,1.08,2.85,1045
1,13.86,1.35,2.27,16,98,2.98,3.15,.22,1.85,7.22,1.01,3.55,1045
1,14.1,2.16,2.3,18,105,2.95,3.32,.22,2.38,5.75,1.25,3.17,1510
1,14.12,1.48,2.32,16.8,95,2.2,2.43,.26,1.57,5,1.17,2.82,1280
1,13.75,1.73,2.41,16,89,2.6,2.76,.29,1.81,5.6,1.15,2.9,1320

Это часть файла txt, загружаемого:

1,14.23,1.71,2.43,15.6,127,2.8,3.06, .28,2.29,5.64,1.04,3.92,1065 1,13.2,1.78,2.14,11.2,100,2.65,2.76, .26,1.28,4.38,1.05,3.4,1050 1,13.16,2.36,2.67,18.6,101,2.8,3.24, .3,2.81,5.68,1.03,3.17,1185 1,14.37,1.95,2.5,16.8,113,3.85,3.49, .24,2.18,7.8, .86,3.45,1480 1,13.24,2.59,2.87,21,118,2.8,2.69, .39,1.82,4.32,1.04,2.93,735 1,14.2,1.76,2.45,15.2,112,3.27,3.39, .34,1.97,6.75,1.05,2.85,1450 1,14.39,1.87,2.45,14.6,96,2.5,2.52, .3,1.98,5.25,1.02,3.58,1290 1,14.06,2.15,2.61,17.6,121,2.6,2.51, .31,1.25,5.05,1.06,3.58,1295

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Вы добавляете строки в список, поэтому, что неудивительно, это список строк.Вы не даете понять, как вы используете и np.array - я не вижу ни одного признака в вашем коде - и при этом вы не делаете очевидным, какой фактический формат данных вы хотите.

Поэтому я предположил, что вам нужен список списков в переменных x_train и y_train.Вместо добавления строки добавьте список столбцов, преобразованных в числа с плавающей точкой:

    ...
    x_train.append([float(x) for x in columns])
    ...
    y_train.append([float(x) for x in columns])
    ...

Тогда будет довольно легко преобразовать x_train и y_train в numpy nd_arrays или напечатать каждую строку в форматеВы хотите это ...

0 голосов
/ 11 апреля 2019

Так как он выглядит как разделенный запятыми файл, вы можете попробовать:

data = ps.read_csv('train.txt', header=None)
x_train = data[data.iloc[:,0]==1]
y_train = data[data.iloc[:,0]==2]

Если вы хотите из своего кода, просто попробуйте это:

np.array(list(map(float, ','.join(s).split(',')))).reshape(len(x_train),14)
0 голосов
/ 11 апреля 2019

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

[float(element) for element in columns]

В вашем коде вы можете использовать его так:

if columns[0] == "1":
    x_train.append([float(element) for element in columns])

if columns[0] == "2":
    y_train.append([float(element) for element in columns])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...