You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas的to_excel导出DataFrame时如何设置数据类型为数值型

问题:Pandas导出Excel时数据被识别为文本类型,需转为数值/浮点类型

使用pandas的to_excel方法导出透视后的DataFrame到Excel时,所有数据均被识别为文本类型,需要将其导出为数值/浮点类型:

待导出的DataFrame示例

RefDate          2023     2024  2025    2026    2027    2028
DataDate                        
02/01/2024  2.4000  1.7100  2.0000  2.0000  1.9000  NaN
03/01/2024  2.4000  1.7100  2.0000  2.0000  1.9000  NaN
04/01/2024  2.4000  1.7000  1.9500  1.9500  1.9100  NaN
05/01/2024  2.4000  1.7000  1.9500  1.9500  1.9100  NaN
... ... ... ... ... ... ...
27/03/2024  NaN 2.1029  2.0000  1.9750  2.0000  2.0000
28/03/2024  NaN 2.1029  2.0000  1.9500  2.0000  2.0000

with pd.ExcelWriter(r'PATH') as writer:
    df.to_excel(writer, sheet_name='NAME')

已尝试但失败的方法

方法一:循环转换列类型

column_list = []
for column in df.columns:
    column_list.append(column)

for column in column_list:
    df[column] = pd.to_numeric(df[column], errors='coerce')

方法二:指定导出dtype映射

dtype_mapping = {}
for coluna in lista_colunas:
    dtype_mapping[coluna] = float

df.to_excel('dados.xlsx', index=False, dtype=dtype_mapping)

背景:DataFrame由原始数据透视得到

原始数据结构:

Data    RefData     Value
0   02/01/2024  2023-01-01  2.9233
1   02/01/2024  2024-01-01  1.5500
2   02/01/2024  2025-01-01  2.0000
3   02/01/2024  2026-01-01  2.0000
4   02/01/2024  2027-01-01  2.0000
... ... ... ...
300 28/03/2024  2024-01-01  1.8900
301 28/03/2024  2025-01-01  2.0000
302 28/03/2024  2026-01-01  2.0000
303 28/03/2024  2027-01-01  2.0000
304 28/03/2024  2028-01-01  2.0000

透视代码:

df_pivot = df.pivot_table(index='DataDate', columns='RefData', values='value')

解决方案

核心原因

透视后的数据类型继承自原始数据的Value列,如果原始Value列是字符串(object类型),透视后的列也会保持字符串类型,即使看起来是数字,导出到Excel后仍会被识别为文本。

步骤1:修复原始数据的Value列类型

先确认并转换原始数据的Value列为数值类型:

# 检查当前Value列的类型
print(df['Value'].dtype)

# 如果是object类型,转换为浮点型,错误值转为NaN
df['Value'] = pd.to_numeric(df['Value'], errors='coerce')

步骤2:重新透视数据

确保原始数据类型正确后,重新执行透视:

df_pivot = df.pivot_table(index='DataDate', columns='RefData', values='Value')

步骤3:(可选)修复已透视的DataFrame

如果已经有透视后的DataFrame,直接批量转换所有数据列为浮点型:

# 检查透视后各列的类型
print(df_pivot.dtypes)

# 批量转换所有数据列为浮点型
df_pivot = df_pivot.apply(pd.to_numeric, errors='coerce')

步骤4:导出Excel

使用openpyxl引擎导出(确保Excel能正确识别数值类型):

with pd.ExcelWriter(r'PATH', engine='openpyxl') as writer:
    df_pivot.to_excel(writer, sheet_name='NAME')

之前方法失败的原因

  • 方法一:如果透视后的列名是datetime类型(而非字符串),循环遍历列时可能出现赋值不生效的情况;或者转换后未正确修改原DataFrame(误操作了副本)。
  • 方法二:to_excel的dtype参数仅对字符串列生效,无法强制将已有的字符串类型数据转为数值,必须先在DataFrame内部完成类型转换。

内容的提问来源于stack exchange,提问作者Ramiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:20:57