Конкретный числовой формат Python в Excel

1

Я использую пользовательскую функцию, и я пытаюсь применить определенное форматирование к выходному файлу, который отправляется в Excel. Я хочу, чтобы положительные/отрицательные целые числа = 1234,34 выглядели как 1,234/(1,234). У функции я есть работы, но вывод - это строка, и я бы хотел, чтобы она отображалась как целое число /float/number в excel:

def formatter(x):
    if x > 0:
        return '{0:,.0f}'.format(x)
    else:
        return '({0:,.0f})'.format(abs(x))

for col in DFstats2.columns[1:]:
    DFstats2[col] = DFstats2[col].apply(formatter)

В настоящее время для Excel, чтобы рассматривать их как числа, я должен выбрать "конвертировать в число", чтобы выполнять какие-либо операции над ними.

Любые указания будут оценены, спасибо!

Теги:
pandas
excel

1 ответ

2

Если вы хотите, чтобы Excel распознавал ваши строки как отформатированные номера, вам придется использовать pd.ExcelWriter форматирования pd.ExcelWriter. Форматирование строки Python может производить только строки. Здесь тривиальный пример:

import pandas as pd
from string import ascii_uppercase

# Create a Pandas dataframe from some data.
df = pd.DataFrame({'Positive': [1024.34, 2024.34, 3024.34, 4024.34],
                   'Negative': [-1024.34, -2024.34, -3024.34, -4024.34],
                   'Mixed': [1024.34, -2024.34, 3024.34, -4024.34]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter("column_formats.xlsx", engine='xlsxwriter')

# Connect dataframe to Excel worksheet
df.to_excel(writer, sheet_name='Formatted')

# Make handles for workbook/sheet
workbook  = writer.book
worksheet = writer.sheets['Formatted']

# Create positive/negative cell format
pos_neg_fmt = workbook.add_format({'num_format': '#,##0;(#,##0)'})

# Define the worksheet range to apply number format
cols = dict(zip(range(26), ascii_uppercase))
row = len(df)
format_range = '{}{}:{}{}'.format(cols[0], row, cols[len(df.columns)-1], row)

# Apply number formats to specified range
worksheet.set_column(format_range, None, pos_neg_fmt)

writer.save()

Методы ExcelWriter предоставляют вам огромную гибкость для форматирования ваших данных с помощью Excel. Вы можете даже добавить условное форматирование, если хотите. И вам никогда не придется прикасаться к книге, в соответствии с вашими требованиями.

  • 0
    T.Ray - спасибо за ваш ответ - следующий вопрос - каково значение «26» в range () для выражения dict (zip (range ()?) И каково значение «ascii_uppercase»? Также ascii_uppercase не поддерживается в моем экземпляре python и, к сожалению, из-за ограничений работы я не могу импортировать / устанавливать новые модули - есть ли обходной путь? и, наконец, что именно делает dict (zip (range (x), 'ascii_uppercase')) Еще раз спасибо за вашу помощь, но я новичок в zip и документация мне не понятна.
  • 0
    ascii_uppercase - это прописные буквы английского алфавита в виде строки, то есть 'ABC ... XYZ'. А range(26) - это количество букв. Идея, которая может оказаться бесполезной в вашем случае, состоит в том, чтобы сделать (zip) справочную таблицу, то есть dict, {0: 'A', 1: 'B', 2: 'C',..., 25: 'Z'} который позволяет ссылаться на столбцы Excel по номерам. Вам не нужно использовать этот подход. Вы можете просто жестко закодировать диапазон, например, «A: A» или «A: C» или «A1: C4» и т. Д. Суть в том, что вам нужно указать диапазон на листе Excel, к которому вы хотите применить числовой формат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню