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

将CSV数据导入NumPy数组失败求助:循环赋值无法正常工作

解决CSV字符串数据转NumPy数组的问题

问题出在哪?

你这段代码跑不起来的核心原因是数组类型不兼容:np.zeros((121, 30))创建的是浮点型数组,但你的CSV里存的是字符串数据,直接把字符串列表塞进去,Python肯定会报错——就像你不能把文字塞进一个专门存数字的盒子里一样。

几种可行的解决方案

1. 用NumPy自带的函数直接读(最省心)

NumPy其实已经帮你封装好了读取CSV的工具,根本不需要手动用csv模块循环赋值,一行代码搞定:

import numpy as np

# 直接读取字符串类型的CSV,delimiter是你的CSV分隔符(一般是逗号)
arr = np.genfromtxt('data.csv', delimiter=',', dtype=str)

如果你的CSV有表头,还可以加个skip_header=1参数跳过第一行。要是想用loadtxt也可以,用法差不多:

arr = np.loadtxt('data.csv', delimiter=',', dtype=str)

2. 手动处理的话,先创建字符串类型的数组

如果你一定要用csv模块来读,那得先初始化一个字符串类型的NumPy数组,而不是浮点型的:

import csv
import numpy as np

with open('data.csv', 'r') as f:  # 用with语句自动关文件,比手动close更安全
    csv_file = csv.reader(f)
    # 创建空的字符串数组,指定dtype=str
    arr = np.empty((121, 30), dtype=str)
    x = 0
    for row in csv_file:
        # 先检查每行的元素数和数组列数是否匹配,避免索引越界
        if len(row) == 30:
            arr[x] = row
            x += 1

这里用np.empty而不是zeros,因为zeros会用0填充,对于字符串数组来说没意义,空数组更合适。

3. 先转成Python列表再转数组(灵活度高)

如果不确定CSV的行数和列数,先把所有数据读到Python列表里,再一次性转成NumPy数组也是个好办法:

import csv
import numpy as np

with open('data.csv', 'r') as f:
    csv_file = csv.reader(f)
    # 把CSV所有行转成列表
    data_list = list(csv_file)
    # 转成NumPy字符串数组
    arr = np.array(data_list, dtype=str)

这种方式不需要提前知道数组的形状,NumPy会自动识别列表的结构生成对应数组,还能避免因为行数不对导致的赋值问题。


内容的提问来源于stack exchange,提问作者BarryBBenson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:58:12