XlsxWriter с разделителем тысяч данных Pandas - PullRequest
0 голосов
/ 20 сентября 2019

Насколько мне известно, Xlsxwriter может быть лучшим пакетом для форматирования моих чисел с разделителем тысяч.Я много раз читал документы на xlsxwriter, все еще очень запутанно, думаю, у других может быть такая же проблема, поэтому я публикую свой вопрос здесь.У меня есть пандас dataframe DF_T_1_EQUITY_CHANGE_Summary_ADE, и я хочу экспортировать их в Excel и с форматирующим разделителем тысяч.

Row Labels               object
Sum of EQUITY_CHANGE    float64
Sum of TRUE_PROFIT      float64
Sum of total_cost       float64
Sum of FOREX VOL        float64
Sum of BULLION VOL      float64
Oil                     float64
Sum of CFD VOL           object
Sum of BITCOIN VOL       object
Sum of DEPOSIT          float64
Sum of WITHDRAW         float64
Sum of IN/OUT           float64
dtype: object

фрейм данных DF_T_1_EQUITY_CHANGE_Summary_ADE очищен, за исключением того, что в первом столбце Метки строк - это объекты, остальные - все числа.Итак, я использую xlsxwriter для записи фрейма данных в Excel:

import xlsxwriter 
num_fmt = workbook.add_format({'num_format': '#,###'}) #set the separator I want
writer = pd.ExcelWriter('ADE_CN.xlsx', engine='xlsxwriter')
DF_T_1_EQUITY_CHANGE_Summary_ADE.to_excel(writer, sheet_name='Sheet1')
workbook=writer.book
worksheet = writer.sheets['Sheet1']
worksheet.set_column('C:M', None, num_fmt)
writer.save()

Однако я не получаю разделитель тысяч, результат в Excel ниже:

    Row Labels  Sum of EQUITY_CHANGE    Sum of TRUE_PROFIT  Sum of total_cost   Sum of FOREX VOL    Sum of BULLION VOL  Oil Sum of CFD VOL  Sum of BITCOIN VOL  Sum of DEPOSIT  Sum of WITHDRAW Sum of IN/OUT
0   ADE A BOOK USD  778.17  517.36  375.9   37.79   0.33    0   0   0   1555.95 0   1555.95
1   ADE B BOOK USD  6525.51 403.01  529.65  35.43   14.3    0   0   0   500 -2712.48    -2212.48
2   ADE A BOOK AUD  537.7   189.63  147 12.25   0   0   0   0   0   0   0
3   ADE B BOOK AUD  -22235.71   7363.14 224.18  2.69    9.16    0.2 0   0   5000    -103    4897

Может кто-нибудь предоставитьрешение, высоко ценится.

1 Ответ

1 голос
/ 20 сентября 2019

должно работать.Вам нужно переместить add_format() чуть позже в своем коде, после того как вы получите ссылку на объект рабочей книги.Вот пример:

import pandas as pd


# Create a Pandas dataframe from some data.
df = pd.DataFrame({'Data': [1234.56, 234.56, 5678.92]})

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

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')

# Get the xlsxwriter workbook and worksheet objects.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Set a currency number format for a column.
num_format = workbook.add_format({'num_format': '#,###'})
worksheet.set_column('B:B', None, num_format)

# Close the Pandas Excel writer and output the Excel file.
writer.save()

Вывод:

enter image description here

...