从Python到Excel的特定数字格式

从Python到Excel的特定数字格式,python,excel,pandas,Python,Excel,Pandas,我正在使用自定义函数,并尝试将特定格式应用于发送到Excel的输出文件。我希望正/负整数=1234.34看起来像1234/(1234)。我使用的函数可以工作,但输出是一个字符串,我希望它在excel中显示为整数/浮点/数字: def formatter(x): if x > 0: return '{0:,.0f}'.format(x) else: return '({0:,.0f})'.format(abs(x)) for col in D

我正在使用自定义函数,并尝试将特定格式应用于发送到Excel的输出文件。我希望正/负整数=1234.34看起来像1234/(1234)。我使用的函数可以工作,但输出是一个字符串,我希望它在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
格式化方法。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特定的方式格式化数据提供了极大的灵活性。如果愿意,您甚至可以添加条件格式。而且,根据您的要求,您永远不必触摸工作簿。

您是否查看过
xlsxwriter
?您可以将
DataFrame
按原样保存到excel中,然后再处理格式。多亏了Tomas,我看到了xlsxwriter-我希望能够根据我在文件中所做的格式制作一个成品,而不必实际触摸输出(excel文件)T.Ray-谢谢你的回答-后续问题-range()中的'26'对于dict(zip(range()来说)有什么意义语句?以及“ascii_大写字母”的意义是什么?另外,我的python实例不支持ascii_大写字母,不幸的是,由于工作限制,我无法导入/安装新模块-是否有解决方法?最后,dict(zip(范围(x),“ascii_大写字母”)的确切含义是什么是吗?再次感谢您的帮助,但我对zip一无所知,文档也不清楚。
ascii_uppercase
是作为字符串的大写英文字母表,即“ABC…XYZ”。而
range(26)
是字母数。这个想法在您的情况下可能没有用处,就是制作(zip)一个查找表,即dict,
{0:'A',1:'B',2:'C',…,25:'Z'}
允许您按数字引用Excel列。您不需要使用这种方法。您只需对范围进行硬编码,例如“A:A”或“A:C”或“A1:C4”等。底线是,您需要在Excel工作表中指定一个要应用数字格式的范围。