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

使用pd.to_numeric后数值带.0如何去除?Pandas热力图数据问题

问题描述

我有如下数据集:

profession     Australia_F   Australia_M      Canada_F      Canada_M    Kenya_F   Kenya_M
Author         #DIV/0!       80               55            34          60        23
Librarian      10            34               89            33          89        12
Pilot          78            12               67            90          12        55

为制作热力图,我对数据进行融合(melt)并转换为数值类型,代码如下:

melted_df = pd.melt(df, id_vars='Profession', var_name='Country_Gender', value_name='Number')

melted_df[['Country', 'Gender']] = melted_df['Country_Gender'].str.split('_', expand=True)
melted_df['Number'] = pd.to_numeric(melted_df['Number'], errors='coerce')

执行pd.to_numeric步骤前数值显示正常,但执行后出现两个情况:

  • 所有数值被添加小数.0,例如80变为80.0;
  • #DIV/0!被转换为NULL。

我可接受未知值转为NULL,但希望避免添加小数,请问该如何处理?后续需执行以下步骤制作热力图:

heatmap_data = melted_df.pivot_table(index='Profession', columns=['Country', 'Gender'], values='Percentage')
...generating heatmap...
解决方案

要保留整数类型同时处理#DIV/0!为NULL,可采用以下两种方法:

方法一:指定整数向下转换

pd.to_numeric默认会将可转换数值转为浮点数(为兼容NULL值),但可以通过downcast='integer'参数强制转换为支持NULL的整数类型:

melted_df['Number'] = pd.to_numeric(melted_df['Number'], errors='coerce', downcast='integer')

转换后Number列会变为Int64类型(带NULL支持的整数类型),既不会出现.0小数,#DIV/0!也会被转为pd.NA。

方法二:先替换异常值再转整数

先将#DIV/0!替换为pd.NA,再直接转换为支持NULL的整数类型:

melted_df['Number'] = melted_df['Number'].replace('#DIV/0!', pd.NA).astype('Int64')

后续验证与热力图制作

转换完成后,可用melted_df.dtypes查看Number列类型,确认是Int64而非float64。后续的pivot_table和热力图生成步骤不受影响,工具会正常识别带NULL的整数数据并渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:25:56