NumPy调用astype转换2D数组混合数据类型报错原因咨询
问题原因
你当前的dataset是二维同构object数组,形状为(行数, 8),直接调用astype传入结构化dtype时,NumPy会尝试将数组中的每个独立元素都转换为你定义的、包含8个字段的结构化类型,而非将每一列对应到一个字段。处理第二列的字符串值(比如'ANN')时,第一个字段要求int类型,自然就会触发字符串转整数的报错。
解决方法
你已经提前完成了每行元素的类型转换,只需要在生成数组时直接指定结构化dtype即可,不需要先创建object数组再做类型转换,示例如下:
# 定义结构化数据类型 dtype_spec = [ ('SEASON', 'i4'), ('NAME', 'U16'), ('ISO_TIME', 'datetime64[s]'), ('USA_LAT', 'f'),('USA_LON', 'f'), ('USA_WIND', 'i4'),('USA_PRES', 'i4'), ('USA_R34_NE', 'i4') ] # 生成数组时直接指定dtype,注意要把每行转成元组 dataset = np.array([tuple(row) for row in converted_set], dtype=dtype_spec)
如果你确实需要从已有的二维object数组转换,也可以用相同的逻辑处理:
# 现有二维object数组转结构化数组 dataset = np.array([tuple(row) for row in dataset], dtype=dtype_spec)
补充说明
转换完成后数组的形状会变为(行数,),每一条记录是一个包含所有字段的元素:
- 按字段取整列数据:
dataset['NAME']、dataset['USA_LAT'] - 按行取单条记录:
dataset[0] - 混合取值:
dataset['USA_WIND'][10]取第11行的风速值
内容的提问来源于stack exchange,提问作者ivsiquadrus
相关产品推荐
相关产品推荐

