为何打印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的数据列而非索引:
- 查看所有列的类型:
输出会明确显示各列是print(I.dtypes)float32类型,这才是你指定dtype对应的位置。 - 查看单列的类型字符串:
这样就能得到预期的# 替换成你要查看的列名,比如Count print(I['Count'].dtype.str)'float32'。
内容的提问来源于stack exchange,提问作者Virtual Wizard
相关产品推荐
相关产品推荐

