DataFrame糖尿病患者年龄统计格式修正求助:索引与名称不符
问题描述
我需要统计数据框中糖尿病患者的最高发年龄,期望输出的索引为整数类型,名称为“age”,格式如下:
age 25 14 31 13 41 13 29 13 43 11 22 11 28 10 33 10 38 10 36 10 Name: age, dtype: int64
但执行代码(data_clean['age'].where(data_clean['class'] == 'Diabetes')).value_counts().head(10)后,得到的结果索引为float类型,名称为“count”,格式如下:
age 25.0 14 31.0 13 41.0 13 29.0 13 43.0 11 22.0 11 28.0 10 33.0 10 38.0 10 36.0 10 Name: count, dtype: int64
请问如何将结果索引改为整数类型,名称改为“age”?
解决方案
方法1:链式调用一步实现
直接筛选糖尿病患者的年龄列后统计,从根源避免类型问题,同时调整索引和名称:
( data_clean[data_clean['class'] == 'Diabetes']['age'] .value_counts() .head(10) .rename_axis('age') .rename('age') )
说明:直接筛选符合条件的行,得到的年龄列是整数类型,后续统计的索引天然为整数;rename_axis设置索引名称,rename修改Series的名称,最终输出完全匹配需求。
方法2:基于原结果分步调整
如果想保留原代码的筛选逻辑,可对结果做后处理:
# 执行原代码获取初始结果 result = (data_clean['age'].where(data_clean['class'] == 'Diabetes')).value_counts().head(10) # 将索引转换为整数类型 result.index = result.index.astype(int) # 修改Series的名称为"age" result.name = 'age'
问题根源
原代码使用where时,会为不符合条件的行填充NaN,而NaN只能存储在float类型的Series中,导致后续统计的索引变为float。直接筛选糖尿病患者的行再取年龄列,就能得到整数类型的Series,从源头解决类型问题。
内容的提问来源于stack exchange,提问作者lokalhangatt
相关产品推荐
相关产品推荐

