Процентные данные из .csv в Excel

#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)