Добавить список строк в первый столбец в CSV - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть список списков в следующем формате:

test_data = [[0.09792, 0.04583, 0.01667, 0.05208, 0.02917, 0.0375, 0.03958, 0.11042, 0.03542, 0.01667, 0.13125, 0.01667, 0.01875, 0.04583, 0.1, 0.05833, 0.06042, 0.00625, 0.03333, 0.04792], 
            [0.0709, 0.04104, 0.0398, 0.06343, 0.02239, 0.03109, 0.07463, 0.04851, 0.01493, 0.05597, 0.11194, 0.0597, 0.04104, 0.03731, 0.02612, 0.0995, 0.05224, 0.00373, 0.02985, 0.07587], 
            [0.1232, 0.0704, 0.0128, 0.056, 0.024, 0.032, 0.0528, 0.0656, 0.0256, 0.0384, 0.1088, 0.0368, 0.0352, 0.0352, 0.0688, 0.0528, 0.0336, 0.0096, 0.0384, 0.08]

Это только подмножество полных данных, которое содержит больше подсписков. Я использую следующий код для записи данных в CSV следующим образом:

import csv
import sys
with open("my_data.csv", "wb") as my_csv:    
    w = csv.writer(my_csv, sys.stdout)
    w.writerow(column_headers)
    w.writerows(zip(*test_data))

Переменная column_headers - это список строк длиной 24 элемента, который записывается как первая строка, служащая идентификаторами столбцов. Имеет формат:

column_headers = ['header_1', 'header_2', ....., 'header_24']

Выходная таблица CSV выглядит следующим образом:

header_1,  header_2,  header_3, ...., header_24
0.0979,    0.0709,    0.1232,   ...., 0.0688
0.0458,    0.0410,    0.0704,   ...., 0.0527
0.0166,    0.0398,    0.0128,   ...., 0.0389

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

row_id = ['row_id', 'a', 'b', 'c'...., 'k']

row_id,  header_1,  header_2,  header_3, ...., header_24
a        0.0979,    0.0709,    0.1232,   ...., 0.0688
b        0.0458,    0.0410,    0.0704,   ...., 0.0527
c        0.0166,    0.0398,    0.0128,   ...., 0.0389

Я использую следующий код для этого:

for ind, line in enumerate(fileinput.input("my_data.csv", inplace = True)):
    sys.stdout.write("{},{}\n".format(line.rstrip(), row_id[ind]))

К сожалению, данные выходят в другом формате. Список строк помещается в последний столбец. Это выглядит так:

    header_1,  header_2,  header_3, ...., header_24,  row_id
    0.0979,    0.0709,    0.1232,   ...., 0.0688,     a
    0.0458,    0.0410,    0.0704,   ...., 0.0527,     b
    0.0166,    0.0398,    0.0128,   ...., 0.0389,     c

Как я могу настроить приведенный выше код для размещения row_id в первом столбце по желанию?

Спасибо за ваше время

Ответы [ 3 ]

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

Попробуйте это:

for ind, line in enumerate(fileinput.input("my_data.csv", inplace = True)):
    sys.stdout.write(f"{row_id[ind]},{line.rstrip()}\n")
0 голосов
/ 13 февраля 2019
sys.stdout.write("{},{}\n".format(row_id[ind], line.rstrip()) 
0 голосов
/ 10 ноября 2018

Это просто замена порядка 2 аргументов! Спасибо @ rishabh.bhardwaj в комментариях к моему оригинальному сообщению. Смотрите ниже:

for ind, line in enumerate(fileinput.input("my_data.csv", inplace = True)):
    sys.stdout.write("{},{}\n".format(row_id[ind], line.rstrip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...