2010-08-13 3 views
1

К сожалению, я согласен, что было действительно плохо написано:заменить пустые наборы данных

Take 2: У меня есть много столбцов данных (до 63) в более чем 50 наборов данных. Я извлекаю только 3 столбца данных, которые мне нужны, и записываю их в новый CSV-файл. Есть несколько моих наборов данных, у которых нет третьего нужного столбца данных. Но это нормально, я могу оставить его пустым (или добавить другое значение, например «-» или что-то еще). Я не хочу открывать все свои файлы, чтобы выяснить, какие файлы есть. Сообщение об ошибке я получаю, когда я пытаюсь извлечь данные из несуществующего столбца:

IndexError: list index out of range 

Есть петля, что я могу написать, чтобы исправить это? Я действительно новичок в python, и в моей голове это кажется легким, но когда я пытаюсь это сделать, это очень сложно.

Благодаря

+2

Вы делаете **, что то же самое **? Почему вы пытаетесь извлечь данные из несуществующих столбцов? Если бы я был вами, я бы просто этого не делал ... (Другими словами, ваш вопрос очень плохо написан и довольно непонятен. Пожалуйста, перепишите.) – chryss

+0

Претензии за предоставление ошибки, но без данных образца немного сложно понять, что вы делаете –

+0

Какая вещь? Какой набор данных? Какой столбец? Какой код? Какой выходной файл? Подождите ... ">>> from pychic import read_mind" "ImportError: Нет модуля с именем pychic". Сожалею. – ddaa

ответ

0

Основываясь на сообщении об ошибке, я предполагаю, что у вас есть список списков, который выглядит примерно так (грубое упрощение):

[[0,1,2,3], 
[1,2,3,4,5], 
[1,2,3], 
[1,2,3]] 

И вы пытаетесь сделать следующие:

для строки в xrange (4): для col in xrange (4): # some something else? печать данных [строка] [Col]

А потом вы получаете свою ошибку, потому что одно из значений не имеет элемент с индексом 3:

+------------------------+ 
| Index: | 0 | 1 | 2 | 3 | 
+------------------------+ 
|Value: | 1 | 2 | 3 | <----- No value at index 3 
+--------------------+ 

В зависимости от того, где вы получаете ваши данные изначально, существует несколько разных способов выполнить то, что вы пытаетесь выполнить.

Если вы предоставите образец ввода-вывода, вы получите гораздо лучшие ответы.

0

Я предполагаю, что вы делаете что-то вроде:

for line in file: 
    parts = line.split() 
    blah = line[2] 

и бла не существует для некоторых линий.

Вы можете проверить длину списков:

if len(parts) > 2: 
    blah = line[2] 
else: 
    blah = "" # or whatever 

Без кода примера это трудно быть более точным, но это, вероятно, быстро и легко исправить для того, что вы делаете.

+0

спасибо за это! –

0

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

try: 
    a = list[57] 
except IndexError: 
    a = '-' 
Смежные вопросы