Я пытаюсь взять CSV из трех столбцов и n строк, и сделать только элементы первого столбца в итерируемый список. У меня проблема в том, что он берет список, который выглядит следующим образом (в коде «datalist»):

[
    ['56529.132', '16.9199', '0.152425'], ['56529.133', '16.4637', '0.127646'],
    ['56529.139', '16.4859', '0.12598'],  ['56529.139', '16.4011', '0.121806'],
    ['56529.147', '16.7835', '0.31821'],  ['56529.148', '16.3248', '0.179531'],
    ['56529.155', '16.3012', '0.146556'], ['56529.162', '16.1506', '0.174568'],
    ['56529.169', '16.1904', '0.180294'], ['56529.17', '16.0262', '0.164397'],
]

И выделение первого столбца в нечто похожее на:

56529.132
56529.133
56529.139
56529.139
56529.147
56529.148
56529.155
56529.162
56529.169
56529.17

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

['5']
['6']
['5']
['2']
['9']
['.']
['1']
['3']
['2']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['3']
['3']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['3']
['9']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['3']
['9']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['4']
['7']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['4']
['8']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['5']
['5']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['6']
['2']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['6']
['9']
['5']
['6']
['5']
['2']
['9']
['.']
['1']
['7']

Как я мог это исправить? Мне нужен список с каждым из этих элементов "нетронутым", чтобы он выглядел как

[['56529.132'],['56529.133'],['56529.139'],...

Мой код до сих пор:

def read_csvfile(filename):
    import csv
    with open(filename) as csvfile:
        reader = csv.reader(csvfile, delimiter='\t')
        datalist = list(reader)
    return datalist

in_confirm = read_csvfile('bin3test.csv')

def confirm_obs(in_confirm):

    for row in in_confirm:
        col1 = row[0]
        print(col1)


result = confirm_obs(in_confirm)

Немного данных в CSV:

56529.132   16.9199 0.152425
56529.133   16.4637 0.127646
56529.139   16.4859 0.12598
56529.139   16.4011 0.121806
56529.147   16.7835 0.31821
56529.148   16.3248 0.179531
56529.155   16.3012 0.146556
56529.162   16.1506 0.174568
56529.169   16.1904 0.180294
56529.17    16.0262 0.164397
1
Grant Donnelly 23 Окт 2018 в 21:49

2 ответа

Лучший ответ

Я бы получил первый ряд, как это:

first_col = [row[0] for row in in_confirm]

И тогда я получу отдельные символы / цифры любым из этих двух методов (не знаю, какой вам нужен):

[x for item in first_col for x in item]
# ['5', '6', '5', '2', '9', '.', '1', '3', '2', '5', ...

[[x] for item in first_col for x in item]
# [['5'], ['6'], ['5'], ['2'], ['9'], ['.'], ...
0
Edgar Ramírez Mondragón 23 Окт 2018 в 19:52

Дано in_confirm (также datalist):

first_values = [ [x[0].split()[0]] for x in in_confirm ]

Если вам не нужна изменяемая структура данных, лучше использовать кортеж:

first_values = [ (x[0].split()[0],) for x in in_confirm ]

Но да, было бы лучше исправить проблему с разделителем при чтении.

0
Mayur Patel 23 Окт 2018 в 19:56
52955989