Я несколько раз сталкивался с этой проблемой и пробовал несколько разных подходов, но я не могу понять, что это правильно. Это упрощенная версия моего файла данных в формате CSV: testme.csvПопытка извлечь часть csv в массив numpy
"Name", "City", "State", "1996-04", "1996-05", "1996-06", "1996-07"
"Bob", "Portland", "OR", 100000, 120000, 140000, 160000
"Sally", "Eugene", "OR", 50000, 75000, 80000, 90000
"Peter", "San Francisco", "CA", , , 440000, 500000
Я хочу, чтобы извлечь числа как 2D массив, которые я хочу сделать некоторую математику на. Однако перед этим я должен игнорировать эти текстовые поля. Кроме того, некоторые строки не будут иметь номера для всех столбцов, но как только числа начинаются, они непрерывны вправо (т. Е. Некоторые строки имеют пустые элементы для первых нескольких столбцов), и это может быть разным для каждой строки. Кроме того, множество реальных данных имеет сотни строк и столбцов десятки
Это часть того, что я пробовал:
import csv
import numpy as np
filename = "testme.csv"
ifile = open(filename, 'r')
header1 = ifile.readline()
reader = csv.reader(ifile)
A = np.array([]).reshape(0, 4)
for row in reader:
print row
print row[3:]
A = np.vstack([A, row[3:]])
print A
А потом я получаю это:
['Bob', ' "Portland"', ' "OR"', ' 100000', ' 120000', ' 140000', ' 160000']
[' 100000', ' 120000', ' 140000', ' 160000']
['Sally', ' "Eugene"', ' "OR"', ' 50000', ' 75000', ' 80000', ' 90000']
[' 50000', ' 75000', ' 80000', ' 90000']
['Peter', ' "San Francisco"', ' "CA"', ' ', ' ', ' 440000', ' 500000']
[' ', ' ', ' 440000', ' 500000']
[[' 100000' ' 120000' ' 140000' ' 160000']
[' 50000' ' 75000' ' 80000' ' 90000']
[' ' ' ' ' 440000' ' 500000']]
Я m close, но все элементы теперь являются буквальными строками. Есть ли более простой способ сделать это и получить числа вместо этого, или я знаю, пройти через это и преобразовать каждый элемент в числа? И пустые элементы, которые я мог бы получить, закрепили их до нуля.
Благодарим вас за консультацию и помощь заблаговременно!
Аарон
Update (8/1/16) я пойти с методом genfromtxt как соответствует то, что мне нужно было много. Вот результат для потомства и другие
import csv
import numpy as np
NumIgnoreFirstCols = 3
filename = "testme2.csv"
ifile = open(filename, 'r')
reader = csv.reader(ifile)
header1 = next(reader)
numcols = len(header1)
#Find number of cols for usecol in genfromtxt
print("numcols", numcols)
ifile.close()
print(range(NumIgnoreFirstCols, numcols))
aMatrix = np.genfromtxt(filename, skip_header=1, delimiter=',', usecols=range(NumIgnoreFirstCols,numcols), dtype=int)
print aMatrix
normalizedMatrix = np.where(aMatrix<0, 0, aMatrix)
print(normalizedMatrix)
minValue = np.amin(normalizedMatrix)
maxValue = np.amax(normalizedMatrix)
print (minValue, maxValue)
снова
Спасибо за помощь
Я пошел с этим решением, поскольку он соответствовал большей части того, что мне нужно. Я отправлю то, что я использовал, наконец, –