为什么pandas DataFrame会将value_counts()输出的整数转为object类型?

类型异常原因
- 统计结果存在空值(NaN):pandas 1.0版本之前,整数类型不支持存储空值,只要序列中出现NaN,整列类型会自动转为float,若同时存在字符串等其他类型值,就会进一步转为通用的object类型。
- 构建DataFrame时传入的结构类型不统一:如果传入
pd.DataFrame()的参数是包含多个不同类型序列的列表/字典,或者将value_counts()的结果和其他非整数类型数据共同传入,pandas无法推导统一数值类型时,就会默认设置为object类型。 sec_id原始列存在类型混杂的异常值:如果sec_id列本身同时存在字符串、数值等多种类型的值,value_counts()的统计结果索引本身就混合了类型,构建DataFrame后对应列就会识别为object。
验证排查方式
- 先单独检查
value_counts()的输出类型:执行print(sec_id.value_counts().dtype),确认统计得到的计数值本身是否已经是object类型。 - 检查统计结果是否有空值:执行
print(sec_id.value_counts().isna().any()),确认是否存在空值导致类型转型。 - 排查
sec_id原始列的类型分布:执行print(sec_id.apply(type).value_counts()),确认原始数据是否存在类型混杂的情况。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

