DataFrame中uint8列转int64遇阻:dtype判断报错问题咨询
嗨,我来帮你理清这个问题:
首先,你遇到的第一个错误——uint8未定义,原因很简单:uint8是numpy库中的数据类型对象,你直接在代码里写uint8,Python根本不知道它指的是什么,就像调用一个没定义的变量一样,自然会触发NameError。
然后是第二个问题:用字符串"uint8"对比无效,这是因为train_analisis_num[i].dtype返回的是一个numpy的dtype对象(比如输出是dtype('uint8')),而不是纯字符串。你拿一个对象和字符串直接比较,结果肯定是False,所以判断逻辑根本不会触发。
接下来给你几种正确的解决办法:
方法1:导入numpy,用官方类型对象判断
先确保导入numpy,然后用np.uint8来做类型对比:
import numpy as np import pandas as pd for col in train_analisis_num.columns: if train_analisis_num[col].dtype == np.uint8: train_analisis_num[col] = train_analisis_num[col].astype(np.int64)
方法2:把dtype转成字符串再对比
如果你不想额外处理numpy的类型,也可以把dtype对象转成字符串后再和"uint8"比较:
for col in train_analisis_num.columns: if str(train_analisis_num[col].dtype) == 'uint8': train_analisis_num[col] = train_analisis_num[col].astype('int64')
方法3:更高效的批量处理方式
其实pandas提供了直接筛选指定类型列的方法,不用循环一个个判断,代码更简洁:
# 筛选出所有uint8类型的列 uint8_columns = train_analisis_num.select_dtypes(include=['uint8']).columns # 批量转换为int64 train_analisis_num[uint8_columns] = train_analisis_num[uint8_columns].astype('int64')
这样就能轻松把所有uint8类型的列转成int64啦!
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

