df.to_excel 将小数列转换为文本

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

我有一个 DataFrame,其中某些列使用

Decimal
数据类型。我想将此数据导出到 Excel 电子表格,并保留小数/数字格式。但是,我的代码正在将列转换为文本格式。

df['some_col1'] = df['some_col1'].apply(lambda x: Decimal(x) if pd.notnull(x) else None)
df['some_col2'] = df['some_col2'].apply(lambda x: Decimal(x) if pd.notnull(x) else None)
output = io.BytesIO()
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
    df.to_excel(writer, index=False, sheet_name='Sheet1')
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    
    # Define number format
    number_format = workbook.add_format({'num_format': '0.0000'})
    
    # Apply formatting based on column name
    for col_num, col_name in enumerate(df.columns):
        if col_name == 'some_col1' or col_name == 'some_col2':  # Specify by column name
              worksheet.set_column(col_num, col_num, None, number_format)

即使我直接在

set_column
中指定列(例如“A:A”),它也不起作用。您可以在电子表格中看到这种不正确的格式:

Excel column is in text, not number, format

如何以正确的格式导出此数据?

python excel pandas decimal python-decimal
2个回答
4
投票

已知问题。这是 Github 问题链接:GitHub 问题:Excel 中的十进制到文本

该问题是由 Pandas

to_excel
方法引起的,其中
decimal.Decimal
值被保存为文本是由于 Pandas 未将其识别为数字类型。

要解决此问题,您可以将小数点修改为

float
:

直接转换为Float

您可以直接转换为浮点数,而不是转换小数然后转换为浮点数。

df['some_col1'] = df['some_col1'].astype('float')
df['some_col2'] = df['some_col2'].astype('float')

这将被识别为数字类型,而不是 Excel 中的文本。


0
投票

尝试使用以下方法更改列类型:

df['some_col1'] = pd.to_numeric(df['some_col1']).apply(lambda x: float(x) if pd.notnull(x) else None)
df['some_col2'] = pd.to_numeric(df['some_col2']).apply(lambda x: float(x) if pd.notnull(x) else None)
© www.soinside.com 2019 - 2024. All rights reserved.