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

能否将含混合类型的表格导入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:20:26