使用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
相关产品推荐
相关产品推荐

