Скрипт Numpy CSV выдает «ValueError: установка элемента массива с последовательностью» - PullRequest
3 голосов
/ 01 октября 2010

У меня есть скрипт на python, который успешно загружает CSV-файл в двумерный массив и затем успешно извлекает значение нужной ячейки на основе значений столбца и заголовка строки. В целях диагностики у меня есть скрипт, который печатает содержимое матрицы данных, прежде чем она будет помещена в массив. Сценарий работает, когда данные из базового CSV-файла содержат значения для всех строк / столбцов. Проблема в том, что он выдает ошибку, когда я запускаю сценарий для файла CSV, который, очевидно, имеет пару пустых строк / столбцов в конце файла CSV. Я попытался решить эту проблему, открыв файл CSV в Notepad ++ и удалив столько, сколько это позволило бы мне удалить из конца файла. Notepad ++ позволил мне удалить одну строку в конце, но не указывал на наличие пустых столбцов. После более глубокого изучения взаимосвязи между распечаткой python и структурой моих базовых данных я вижу, что команда печати python говорит, что в конце массива есть два пустых столбца. В любом случае, после редактирования файла CSV, я по-прежнему печатал те же данные, когда запускал скрипт, и он по-прежнему выдавал ту же ошибку, как если бы я не удалил пустую строку из конца файла CSV. Я проверил, что я сохранил файл csv, пару раз открыл и закрыл файл csv, пару раз закрыл и заново открыл python, но ошибка все еще сохраняется:

Вот мой вопрос:
Как мне изменить скрипт ниже, чтобы избежать этой ошибки?

Вот функция, о которой я говорил выше:

def GetHSD_alpha(NumberOfColumnMeans,dfResid):  
    dirname=os.path.dirname(os.getcwd())  
    resources=os.path.join(dirname,'resources')  
    inputfile=os.path.join(resources,'CriticalValuesOfTukeysHSD_a_0_01.csv')  
    separator=','  
    ColumnIndex=NumberOfColumnMeans  
    RowIndex=dfResid  
    cast = p.cast  
    data = [[] for dummy in xrange(13)]  
    for line in open(inputfile, 'r'):  
        fields = line.strip().split(separator)  
        for i, number in enumerate(fields):  
            data[i].append(number)  

    print 'data HSD alpha is:  ',data
    time.sleep(2)

    CriticalValuesArray=p.array(data)
    HSD_alpha_0_01=CriticalValuesArray[ColumnIndex,RowIndex]

return HSD_alpha_0_01

Также, для справки, здесь приведена сокращенная версия результата печати данных, которые выдают ошибку. Обратите внимание на пустые элементы в конце, которые я не могу удалить вручную из моего csv-файла перед запуском скрипта:

данные HSD альфа: [['', '5', '6', '7'], ['2', '5.7', '5.24', '4.95'], ['3', ' 6,98 ',' 6,33 ',' 5,92 '], [' 11 ', '10,48', '9,3', '8,55'], [], []]

Также для справки приведена сокращенная версия результата печати данных из другого файла CSV, который я импортировал в скрипт для диагностических целей. Данные, соответствующие распечатке ниже, НЕ заставляют скрипт выдавать ошибку:
Данные HSD альфа: [['', '1', '2', '3'], ['1', '4052', '98 .49 ', '34 .12'], ['2', '4999', '99 .01 ', '30 .81'], ['3', '5403', '99 .17 ', '29 .46']]

Опять же, когда я открываю базовые файлы csv в Notepad ++, кажется, что нет пустых столбцов или строк, и я тщательно проверил эти файлы данных.

Наконец, я представляю, что число пустых строк / столбцов может варьироваться, поэтому любое решение должно было бы иметь возможность обрабатывать переменные числа пустых строк / столбцов.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

нашел ответ.Мне нужно было изменить следующую строку кода:

data = [[] for dummy in xrange(11)]

xrange нужно было установить на 11, а не на 13.

простой ответ, но это потребовало много копаний.на эту тему ответили / закончили сейчас.

0 голосов
/ 01 октября 2010

почему вы пишете свой собственный загрузчик CSV?numpy.loadtxt?или в вашем случае с пропущенными значениями: numpy.genfromtxt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...