Ошибка значения: недопустимый литерал для int() с основанием 10: «ЛОЖЬ» При удалении пустой строки из набора данных

#python

Вопрос:

 with open(filename,'r') as input_file:   csv_reader = csv.reader(input_file,delimiter = ',')    for line_number, line in enumerate(csv_reader):  if line_number == 0: # skip the header  continue  #if line[10] == '':  #line.insert(10,0)  my_dic.append({    'First Name':line[11],  'Last name':line[13],  'Age(Years)':int(line[3]),  'Sex':line[18],  'type of car':line[16],  'Marital Status':line[14],  'Dependants':line[10],  'Yearly Salary':int(line[17]),  'Yearly Pension':int(line[15]),  'Company':line[5],  'Commuted Distance':float(line[4]),  'vehicle':{  'Make':line[19],  'model':line[20],  'year':int(line[21]),  'category':line[22]    },  'Credit Card':{  'Start Date':line[6],  'End Date':line[7],  'Card number':line[8],  'Card CCV':int(line[9]),  'iban':line[12]    },  'Address':{  'Street':line[0],  'City':line[1],  'Postcode':line[2]  }        })   

У меня есть приведенный выше код преобразования csv-файла в словарь, и я также хочу заменить пустые строки в столбце 10 набора данных. Если я удалю прокомментированный код (код, который пытается заменить пустую строку в столбце 10 (данных) номером), мой код сработает. Однако, если я удалю комментарий, он выдаст ошибку значения в ключе «годовая зарплата», которую я набираю в целые числа)

1.Как еще я могу заменить пустую строку в столбце на число (я не хочу использовать панд)

  1. Я также хочу знать строки, в которых происходит исправление

Комментарии:

1. Это правильно. Я должен был использовать оператор присваивания . В конечном итоге это не сработало с .. если строка[10]== Нет . Итак, я использовал if line[10]==» как написано, и он улавливает все строки с пустыми строками . Я догадался «отличается от» Нет » в python . Во-вторых, я намеревался использовать считыватель, а не диктофон, поэтому я индексировал цифры вместо имени столбца .

Ответ №1:

line.insert(10,0) вставляет дополнительное значение в массив. Например, если массив был длиной 20, то после insert этого он будет иметь длину 21. Вы получаете неправильные значения, и в позиции 17 вы получаете нецелочисленное значение.

Вы хотите заменить значение, а не вставить его.

 line[10] = 0  

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

 { ... "Dependants": line[10] or 0, ... }  
  1. Чтобы получить номер строки, самый простой способ-сохранить line_number его в некотором массиве… Например,
 missing_data_on_dependants_row_idxs = list() for line_number, line in enumerate(csv_reader):  if line_number == 0: # skip the header  continue  if line[10] is None:  missind_data_on_dependants_row_idxs.append(line_number) ...  

Кроме того, трудно понять, как ссылаться на столбцы по индексам. Вы рассматривали возможность использования csv.DictReader ?

Комментарии:

1. .Это верно. Я должен был использовать оператор присваивания . В конечном итоге это не сработало с if line[10]==Нет . Поэтому я использовал if line[10]==» как написано, и он ловит все строки с пустыми строками, как указано выше . Я догадался «отличается от» Нет » в python . Во-вторых, я намеревался использовать считыватель, а не диктофон, поэтому я индексировал цифры вместо имени столбца . Мой код больше не возвращает ошибку, но типизация, которую я сделал для иждивенцев после исправления, не преобразовала иждивенца в тип int в словаре . У меня все еще есть веревочка . Есть ли что-нибудь, что я могу сделать дальше ?

2. 'Dependants': int(line[10]), может быть?