所有列均为float64和int64类型,为何dtype显示为object?
问题描述
执行以下代码查看数据类型:
print(cleaned_train.dtypes) print("--") print(cleaned_test.dtypes)
得到输出:
YearOfObservation int64 Insured_Period float64 Residential int64 Building_Painted float64 Building_Fenced float64 Building_Type float64 Claim float64 Building Dimension float64 Geo_Code float64 dtype: object -- YearOfObservation int64 Insured_Period float64 Residential int64 Building_Painted float64 Building_Fenced float64 Building_Type float64 Claim float64 Building Dimension float64 Geo_Code float64 dtype: object
尝试获取numeric类型却得到object类型,请问这是什么原因?
原因解析
你看到的最后一行dtype: object,是**cleaned_train.dtypes这个Series对象本身的数据类型**,和数据框里列的类型无关。从输出能明确看到,所有列的类型都是int64或float64,这些都属于numeric数值类型。
如果确实存在获取numeric类型时返回object的情况,可能是以下原因:
- 列中混入了字符串形式的数值:比如部分单元格存储的是
'100'这类字符串而非纯数值,导致列被识别为object类型。但你当前的dtypes输出显示所有列都是数值类型,所以这种情况不成立。 - 后续操作中的误处理:比如列名包含空格(如
Building Dimension),在引用列时出错,意外触发了类型转换,但从当前的dtypes结果看,列本身的类型是正常的。
简单说,你现在的数据框所有列都是numeric类型,别被df.dtypes最后一行的object标识误导,它只代表存储这些类型信息的Series的类型。
内容的提问来源于stack exchange,提问作者Ahmed Triki
相关产品推荐
相关产品推荐

