能否将含混合类型的表格导入Python Numpy数组?
解决Numpy导入混合数据类型CSV的问题
当然支持导入包含字符串和数值的混合类型表格啦!你遇到的大量nan,是因为np.genfromtxt默认会把所有数据解析成统一的数值类型——而城市名称是字符串,没法转换成数值,就被替换成了nan。
下面给你两种可行的解决方案:
1. 手动指定混合数据类型
你可以通过dtype参数明确定义每一列的数据类型,让Numpy正确解析字符串和数值:
import numpy as np # 定义各列的类型:城市名是长度10的字符串,其余为整数 dtype_spec = [('city', 'U10'), ('total', int), ('00-04', int), ('05-09', int)] # 导入时跳过表头行(skip_header=1) structured_data = np.genfromtxt('populationData2016.csv', delimiter=',', dtype=dtype_spec, skip_header=1) # 转换成你想要的列表格式 target_format = [['city name', 'total', '00-04', '05-09']] for row in structured_data: target_format.append([row['city'], row['total'], row['00-04'], row['05-09']]) print(target_format)
2. 让Numpy自动推断数据类型
如果你不想手动写类型,可以用dtype=None让Numpy自动识别每列的类型,同时用names=True读取表头作为字段名:
import numpy as np # encoding='utf-8'避免字符串编码问题 structured_data = np.genfromtxt('populationData2016.csv', delimiter=',', dtype=None, names=True, encoding='utf-8') # 同样转换成目标格式 target_format = [[name for name in structured_data.dtype.names]] for row in structured_data: target_format.append([row[name] for name in structured_data.dtype.names]) print(target_format)
补充说明
Numpy的普通数组要求所有元素类型一致,所以处理混合类型数据时,会用到结构化数组(上面代码里的structured_data就是)——它允许每一列有不同的数据类型,完美适配你的CSV结构。
内容的提问来源于stack exchange,提问作者tt600
相关产品推荐
相关产品推荐

