2016-04-19 2 views
0

Я хочу взять значение столбца 4 из столбца 3 (оба их целых числа), это то, что у меня есть.csv - забрать данные одного столбца из другого

with open('CLASSES.csv', 'rt')as f: 
    reader=csv.reader(f) 
    people=[] 
    for column in reader: 
     people.append(column[0:8]) 

difference = [x[3] for x in people] - [x[4] for x in people] 
print(difference) 

Я получаю ошибку TypeError: неподдерживаемый тип операнда (ов) для -: 'список' и 'список' при этом. Я знаю, почему я получаю ошибку, но я не могу придумать, как это сделать.

Любая помощь будет замечательной!

+0

'difference = [x [3] - x [4] для x у людей]' –

+0

** неподдерживаемый тип операндов для -: 'str' и 'str' ** - ошибка, которую я получаю при использовании что кодирование @PeterWood –

+0

У вас есть строки, которые нужно преобразовать в целые числа: 'int (x [3]) - int (x [4])' –

ответ

1

Как @Peter Wood сказал в комментарии, вы должны вычесть внутри одного понимания списка, не делая два понимания списка, так как это приводит к list - list. Также вам нужно преобразовать в номера.

difference = [int(x[3]) - int(x[4]) for x in people] 

Если вы хотите, чтобы делать такие вещи, как это, вы, вероятно, лучше использовать numpy или даже pandas.

Использование NumPy и это genfromtxt функция:

import numpy as np 
people = np.genfromtxt('CLASSES.txt', delimiter=',', dtype=None) 
difference = people[:, 3] - people[:, 4] 

Здесь people будет двумерный NumPy массива, это первый индекс происходит по рядам, второй по столбцам [:, 3] принимает каждую строку столбца трети.

Опция dtype=None позволяет genfromtxt автоматически определять тип для каждого столбца, по умолчанию float.

Смежные вопросы