You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何打印DataFrame索引dtype输出|o?如何获取正确类型?

问题:DataFrame索引dtype输出异常,得到|o而非预期的float32

执行代码

import pandas as pd, numpy as np, sys

if not (sys.version_info.major, sys.version_info.minor) >= ((3, 7) or (4, 0)):
    print('You must have atleast Python 3.7 to run this program.')
    sys.exit(input('Press enter to exit:'))
    
Dict = {'First': ['Asher', 'Michael'], 'Last': ['Harris', 'Reeves'], 'Age': [21, 25]}
Dict2 = {'First': ['Jessica', 'Melainie'], 'Last': ['Moores', 'Dinkleton'], 'Age': [35, 27]}

A = pd.DataFrame(Dict) 
B = pd.DataFrame(Dict2)
C = A.describe(include=np.number, percentiles=[.35, .40])
D = B.describe(include=np.number, percentiles=[.35, .40])
E = pd.Series(C['Age'], name='Age(C)', dtype=np.float32)
F = pd.Series(D['Age'], name='Age(D)', dtype=np.float32)
I = pd.DataFrame([E, F])
I.drop(columns='std', inplace=True)
I.columns = I.columns.str.capitalize()

print(I)
print(I.index.dtype.str)#outputs |o instead of 'float32'

问题描述

将字典转换为DataFrame,使用describe提取数值型数据,转为指定dtype=np.float32的Series,再组合成DataFrame I并调整列。打印I.index.dtype.str时,预期输出'float32'却得到|o,请问该现象的原因是什么?如何获取正确的dtype?


原因分析

  • 你混淆了索引类型和数据列类型:E和F是float32类型的Series,但用pd.DataFrame([E, F])组合时,新DataFrame的索引是这两个Series的名称('Age(C)'、'Age(D)'),属于字符串类型(numpy中的object类型)。
  • I.index.dtype.str输出的是索引的类型编码,|o是numpy对object类型的简写(|表示字节顺序,o代表object),这和你设置的Series数据类型完全无关。

解决方法

要获取你之前设置的float32类型,需要查看DataFrame的数据列而非索引:

  1. 查看所有列的类型:
    print(I.dtypes)
    
    输出会明确显示各列是float32类型,这才是你指定dtype对应的位置。
  2. 查看单列的类型字符串:
    # 替换成你要查看的列名,比如Count
    print(I['Count'].dtype.str)
    
    这样就能得到预期的'float32'。

内容的提问来源于stack exchange,提问作者Virtual Wizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:35:19