#python #python-2.7 #python-3.x #openpyxl
#python #python-2.7 #python-3.x #openpyxl
Вопрос:
Я прочитал некоторые данные в процентной форме (11,00%) из файла .csv. Я копирую их в файл Excel и хочу представить их на диаграмме. Проблема в том, что когда я копирую их в Excel, данные автоматически преобразуются в строковый тип, и я не могу правильно представить их на диаграмме. Я попробовал несколько методов, но ничего не получилось.
f = open("any.csv")
wb = openpyxl.load_workbook("any.xlsx")
ws = wb.get_sheet_by_name('Sheet1')
reader = csv.reader(f, delimiter=',')
for row in ws.iter_rows(row_offset=0):
for i in reader:
ws.append(i[2:]) code here
Я пробовал использовать:
for row in ws.iter_rows(row_offset=0):
for i in reader:
ws.append(float(i[2:]))
и я получаю эту ошибку:
TypeError: аргумент float() должен быть строкой или числом
Я пытался использовать:
for i in reader:
i[2:] = [float(x) for x in i[2:]]
ws.append(i)
и я получил эту ошибку:
Ошибка значения: недопустимый литерал для float()11.1%
Я использую i[2:], потому что первый и второй столбцы содержат некоторый текст, который не нужно преобразовывать
Комментарии:
1. Все, что вам нужно сделать, это написать функцию, которая преобразует
11.1%
в эквивалентное числовое значение. Это может быть11.1
или0.111
в зависимости от вашего варианта использования. В Excel вы захотите сделать последнее и назначить числовой формат.2. здравствуйте. я видел, что openpyxl позволяет работать со стилями и имеет атрибут number_format = ‘General’, который я пытаюсь изменить на процент.
3. Можно ли изменить тип ячейки после добавления строковых данных и преобразовать их таким образом?
Ответ №1:
for row in ws.iter_rows(row_offset=0):
for i in reader:
ws.append(float(i[2:-1])) code here
Плавающее значение перед его добавлением
Комментарии:
1. Привет, Джоэл, спасибо за ответ. Я уже пробовал это, и я получаю эту ошибку:
2. TypeError: аргумент float() должен быть строкой или числом
3. И если я попробую другой способ: для i в reader: i[2:] = [float(x) для x в i[2:]] ws.append(i)
4. я получил эту ошибку: ValueError: недопустимый литерал для float() 11.1%
5. Я изменил ответ. Вам нужно убрать ‘%’ в конце строки
Ответ №2:
Я нашел решение. Прежде чем добавить данные в Excel, я использую это:
wb.guess_types = True
которые, по-видимому, записывают дату в процентах, сколько мне нужно
Комментарии:
1. Вы также можете использовать его в качестве входного аргумента в методе load_workbook.
wb = openpyxl.load_workbook("any.xlsx", guess_types=True)