将列设置为num格式的文本,而不是一般的python 3

问题描述 投票:0回答:1

我能够将标题更改为文本,但我遇到了一个奇怪的错误。

现在它仍然返回NaN,但是如果我进入并手动突出显示列B(文本中的供应商名称)并通过excel将列更改为文本,则第二个脚本突然可以正常工作。而且我只需要更改工作表1。

是否可以在python / xlsxwriter中模仿它?

我有两个python脚本。一个人将从Excel工作表中获取数据,然后根据分组将其解析为单独的工作表。第二个读取总计,并返回一张电子邮件表。我一直在excel中手动构建它并致力于使其自动化。构建html表的第二个脚本在我的手册中也可以正常工作。我用xlsxwriter构建的工作簿看起来与B列完全相同,但供应商名称的B列格式设置为General而不是Text(手册页为text)。现在,我的第二个脚本在查看新建图纸时仅显示NaN。我尝试将格式设置为文本,但无法正常工作。我能够在其他列上设置货币格式,所以我不确定为什么文本不起作用。

[当我查看单元格时,我可以看到单元格显示的金额是相同的数据,但返回一个数字,但求和后的单元格却没有

我正在使用python 3.6和xlsxwriter。

B列是我需要更改的,它是供应商名称。

worksheet_paygroup.set_column('B:B',40)

我在文档中搜索了xlsxwriter,并发现了2.7的特定内容,但似乎不适用于3。

我试图设置列,写列,添加格式,添加编号格式

import pandas as pd
import numpy as np
import os
import datetime as dt
import pandas.io.formats.excel

df = pd.read_excel(test_sheet)

#this grabs the data from different excel sheet
df_paygroup = df[df['payments'] == 'paygroup']
df_paygroup.drop(columns='unneeded_column')
df_paygroup.insert(3, 'Total', value=' ') #sets new column
df_paygroup = df_paygroup[['Vendor', 'Name', 'Amount', 'Total']]
df_paygroup = df_paygroup.sort_values(by=['Amount'], ascending=False)


writer = pd.ExcelWriter('new_sheet.xlsx', engine='xlsxwriter')
pandas.io.formats.excel.header_style = None

df_paygroup.to_excel(writer, sheet_name='paygroup', index=False)
#there are 15 of these with different names


workbook = writer.book
money_format = workbook.add_format({'num_format': '[$$-409]#,##0.00'})
text_format = workbook.add_format({'num_format': '@'})

worksheet_paygroup = writer.sheets['paygroup']
worksheet_paygroup.set_column('A:A', 11)
worksheet_paygroup.set_column('B:B', 40)
# worksheet_paygroup.write(text_format) $this returns error
worksheet_paygroup.set_column('C:C', 19, money_format)
worksheet_paygroup.set_column('D:D', 16)
worksheet_paygroup.write_formula('E1', '=SUM(C2:C743)')
worksheet_paygroup.set_column('E:E', 20, money_format)


writer.save()
writer.close()

第二个脚本中的输出应显示美元值而不是nan。

在新工作表中显示:南np.isnan = True

旧文件:2265.50(正确的金额)np.isnan = False

<tr>
                            <th>Pay Cycle</th>
                            <th>Description</th>
                            <th>Pay Cycle Amount</th>
                            <th>Daily Total</th>
                        </tr>
                        <tr>
                            <td>paygroup</td>
                            <td>Description</td>
                            **<td>$nan</td>**
                            <td> </td>
                        </tr>
python excel pandas xlsxwriter
1个回答
0
投票

没有人会知道在这里要回答什么,因为没有问题,关于您想要达到的目标的主题标题很差,没有明确的介绍问题等。你到处都是。请构建您的帖子,以便它比您自己(您疯狂的科学家)为他人所理解。

我建议您制作一个小的测试用例,以便可以正确调试它。

更改列名

df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
df.columns = ['a', 'b']
df
© www.soinside.com 2019 - 2024. All rights reserved.