我有一个 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”),它也不起作用。您可以在电子表格中看到这种不正确的格式:
如何以正确的格式导出此数据?
已知问题。这是 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 中的文本。
尝试使用以下方法更改列类型:
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)