Я пытаюсь взять 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
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'], ['.'], ...
Дано 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 ]
Но да, было бы лучше исправить проблему с разделителем при чтении.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.