Изменить строку, чтобы плавать из списка CSV - PullRequest
0 голосов
/ 25 января 2020

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

Это выход, который я получаю сейчас:

['\ufeff', 'appeltaart', 'appelstruif', 'amandelbeschuit', 'brood']
['appel', '3', '4', '0', '0']
['gaar', '2', '2', '0', '1']
['schotel', '2', '4', '0', '0']
['amandel', '0', '0', '4', '0']
['deeg', '1', '0', '2', '5']
['brood', '0', '0', '0', '1']
['suiker', '0', '2', '2', '0']

Объявление это то, что мне нужно

    [['', 'appeltaart', 'appelstruif', 'amandelbeschuit', 'brood'],
    ['appel', 3.0, 4.0, 0.0, 0.0], ['gaar', 2.0, 2.0, 0.0, 1.0],
    ['schotel', 2.0, 4.0, 0.0, 0.0],
    ['amandel', 0.0, 0.0, 4.0, 0.0],
    ['deeg', 1.0, 0.0, 2.0, 5.0],
    ['brood', 0.0, 0.0, 0.0, 1.0],
    ['suiker', 0.0, 2.0, 2.0, 0.0]]

Спасибо

import csv
csv_file = open("recepten.csv")
recepten = csv.reader(csv_file)

for line in recepten:
    for item in line:
        x = item.split(";")
        for a in item:
           float(a)
print(x)
csv_file.close()

Ответы [ 2 ]

0 голосов
/ 25 января 2020

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

Я также изменил несколько шагов в вашем цикле, понимая, что вы открываете файл CSV, не используя CSV lib , list_of_lists уже содержит нужные вам результаты.

csv_file = open("recepten.csv")


list_of_lists = []

for line in csv_file:
    x = line.split(";")
    for i in range(len(x)):
       try:
           x[i] = float(x[i]) #changing your list x
       except ValueError:
           pass #not converting strings
    list_of_lists.append(x)
print(list_of_lists)
csv_file.close()
0 голосов
/ 25 января 2020

Поскольку кажется, что вы знаете, какие столбцы должны быть плавающими по сравнению со строками, вы можете сделать что-то вроде этого:

clean_data = [] # Where you'll be storing the data

for row in raw_data:
    clean_data.append([]) # Add a new row to the clean data list

    first_column_value = row[0] # Get the first value that we know is a string
    clean_data[-1].append(first_column_value) # Add it to the last row on the list

    for col in row[1:]: # Loop through the rest of the values in the row
        clean_data[-1].append(float(col)) # Convert them to floats and add them

print(clean_data)

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

clean_data = [] # Where you'll be storing the data

for row in raw_data:
    clean_data.append([]) # Add a new row to the clean data list

    for col in row:
        try: # Try to convert to a float
            val = float(col)
        except ValueError: # If you get a ValueError, keep it a string
            val = col

        clean_data[-1].append(val) # Add it to the clean_data

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