Я использую пользовательскую функцию, и я пытаюсь применить определенное форматирование к выходному файлу, который отправляется в 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, чтобы рассматривать их как числа, я должен выбрать "конвертировать в число", чтобы выполнять какие-либо операции над ними.
Любые указания будут оценены, спасибо!
Если вы хотите, чтобы 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. Вы можете даже добавить условное форматирование, если хотите. И вам никогда не придется прикасаться к книге, в соответствии с вашими требованиями.
ascii_uppercase
- это прописные буквы английского алфавита в виде строки, то есть 'ABC ... XYZ'. Аrange(26)
- это количество букв. Идея, которая может оказаться бесполезной в вашем случае, состоит в том, чтобы сделать (zip) справочную таблицу, то есть dict,{0: 'A', 1: 'B', 2: 'C',..., 25: 'Z'}
который позволяет ссылаться на столбцы Excel по номерам. Вам не нужно использовать этот подход. Вы можете просто жестко закодировать диапазон, например, «A: A» или «A: C» или «A1: C4» и т. Д. Суть в том, что вам нужно указать диапазон на листе Excel, к которому вы хотите применить числовой формат.