我有一个如下所示的数据集:
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
要根据这些数据创建热图,我将其融化并将值转换为数值。
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...
可以使用
.astype('Int64')
方法而不是
pd.to_numeric
将一列转换为整数,同时还允许空值。以下是如何修改代码的方法:
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)
# 使用 .astype('Int64') 将 'Number' 列转换为整数,同时允许空值
melted_df['Number'] = melted_df['Number'].replace('#DIV/0!', pd.NA)
melted_df['Number'] = melted_df['Number'].astype('Int64')
heatmap_data = melted_df.pivot_table(index='Profession', columns=['Country', 'Gender'], values='Number')
# ...生成热图...
这将执行以下操作:
- 将 '#DIV/0!' 替换为 pd.NA : 这确保了任何错误值都表示为 pandas 可以识别的空值。
-
将“Number”列转换为整数
:
.astype('Int64')
方法将该列转换为整数数据类型,同时仍然允许空值(由pd.NA
表示)。
通过此更改,的数字应不再包含小数,并且仍然可以创建热图。
标签:python,pandas,dataframe,data-analysis,pandas-melt From: 78469275