【问题标题】:Setting default number format when writing to Excel from Pandas从 Pandas 写入 Excel 时设置默认数字格式
【发布时间】:2018-12-06 16:17:29
【问题描述】:

我希望在从 Pandas 数据框写入 Excel 时设置默认数字格式。这可能吗?

我可以使用以下设置默认日期/日期时间格式,但找不到设置默认数字格式的方法。

writer = pd.ExcelWriter(f'{file_variable}.xlsx', engine='xlsxwriter',datetime_format='MM/DD/YYYY')

否则,我假设我必须将工作表分配给变量并遍历指定列的行以设置数字格式。

【问题讨论】:

    标签: python python-3.x pandas openpyxl xlsxwriter


    【解决方案1】:

    我得到这种格式的浮点数到小数点后 1 位。

    data = {'A Prime': {0: 3.26,  1: 3.24,  2: 3.22,  3: 3.2,  4: 3.18,  5: 3.16,
      6: 3.14,  7: 1.52,  8: 1.5,  9: 1.48,  10: 1.46,  11: 1.44,  12: 1.42},
     'B': {0: 0.16608,  1: 0.16575,  2: 0.1654,  3: 0.16505999999999998,  4: 0.1647,  5: 0.16434,  6: 0.16398,  7: 0.10759,  8: 0.10687,  9: 0.10614000000000001,
      10: 0.10540999999999999,  11: 0.10469,  12: 0.10396}, 'Proto Name': {0: 'Alpha',
      1: 'Alpha',  2: 'Alpha', 3: 'Alpha',  4: 'Alpha',  5: 'Alpha',  6: 'Alpha',  7: 'Bravo',  8: 'Bravo',  9: 'Bravo',  10: 'Bravo',  11: 'Bravo',  12: 'Bravo'}}
    
    import pandas as pd
    df = pd.DataFrame(data)
    
    
        A Prime B       Proto Name
    0   3.26    0.16608 Alpha
    1   3.24    0.16575 Alpha
    2   3.22    0.16540 Alpha
    3   3.20    0.16506 Alpha
    4   3.18    0.16470 Alpha
    5   3.16    0.16434 Alpha
    6   3.14    0.16398 Alpha
    7   1.52    0.10759 Bravo
    8   1.50    0.10687 Bravo
    9   1.48    0.10614 Bravo
    10  1.46    0.10541 Bravo
    11  1.44    0.10469 Bravo
    12  1.42    0.10396 Bravo
    
    writer = pd.ExcelWriter(r'c:\temp\output.xlsx')
    # This method will truncate the data past the first decimal point
    df.to_excel(writer,'Sheet1',float_format = "%0.1f")
    writer.save()
    

    但这也许不是所有情况 - 说更大的数字和千位分隔符并不快乐

    df.to_excel(writer,'Sheet1',float_format = ":,")
    

    但以下似乎有效

    data = {'A Prime': {0: 326000,  1: 3240000}}
    df = pd.DataFrame(data)
    
        A Prime
    0   326000
    1   3240000
    
    writer = pd.ExcelWriter(r'c:\temp\output.xlsx')
    df.to_excel(writer,'Sheet1')
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    format1 = workbook.add_format({'num_format': '#,##0.00'})
    worksheet.set_column('B', 18, format1)
    #Alternatively, you could specify a range of columns with 'B:D' and 18 sets the column width
    writer.save()
    

    全部取自这里:http://xlsxwriter.readthedocs.io/working_with_pandas.html

    【讨论】:

    • 感谢 ChrisG 对帖子的更新 - 这些更新更清楚了。
    • 对于未来的读者,我更喜欢第二种方法而不是第一种方法。谢谢@Dickster,不知何故我错过了readthedocs页面上的那个部分。非常感谢。
    【解决方案2】:

    对于它的价值,并且由于问题也被标记为 openpyxl,您还可以在 openpyxl 中编辑整个工作簿的默认样式。这可能对数字格式有意义,但如果更改字体大小等内容,可能会产生意想不到的后果,因为其他 GUI 元素会受到影响。如果谨慎使用,以下应该可以工作。

    wb._named_styles['Normal'].number_format = '#,##0.00'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2017-11-21
      相关资源
      最近更新 更多