python -numpy : read csv into numpy with proper value type

标签 python numpy types

这是我的 test_data.csv:

A,1,2,3,4,5
B,6,7,8,9,10
C,11,12,13,14,15
A,16,17,18,19,20

我使用下面的代码将其读取到 numpy 数组:

def readCSVToNumpyArray(dataset):
    with open(dataset) as f:
        values = [i for i in csv.reader(f)]

    data = numpy.array(values)

    return data

在主代码中,我有:

    numpyArray = readCSVToNumpyArray('test_data.csv')
    print(numpyArray)

这给了我输出:

(array([['A', '1', '2', '3', '4', '5'],
       ['B', '6', '7', '8', '9', '10'],
       ['C', '11', '12', '13', '14', '15'],
       ['A', '16', '17', '18', '19', '20']], 
      dtype='|S2'))

但是数组中的所有数字都被视为字符串,有没有一种好方法可以将它们存储为float,而无需遍历每个元素并分配类型?

谢谢!

最佳答案

由于每行的第一个字符是一个字符串,因此您必须在 numpy 中使用更灵活的类型,称为“object”。尝试使用此功能,看看这是否是您正在寻找的:

    def readCSVToNumpyArray(dataset):
        values = [[]]
        with open(dataset) as f:
            counter = 0
            for i in csv.reader(f):
                for j in i:
                    try:
                        values[counter].append(float(j))
                    except ValueError:
                        values[counter].append(j)
                counter = counter + 1
                values.append([])

        data = numpy.array(values[:-1],dtype='object')

        return data

    numpyArray = readCSVToNumpyArray('test_data.csv')
    print(numpyArray)

结果是:

    [['A' 1.0 2.0 3.0 4.0 5.0]
     ['B' 6.0 7.0 8.0 9.0 10.0]
     ['C' 11.0 12.0 13.0 14.0 15.0]
     ['A' 16.0 17.0 18.0 19.0 20.0]]

关于 python -numpy : read csv into numpy with proper value type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066726/

相关文章:

delphi - 如何重载整数的简单 Delphi 函数?

python - 整数非零

python - 如何在运行时获取应用程序 ID

python - 图像的梯度方向不一致(X vs Y)

python - 扭曲获取 POST 请求的主体

python - 在 sklearn.feature_selection 之后过滤 DataFrame

python - 广播 np.dot 与 tf.matmul 进行张量矩阵乘法(形状必须为 2 级,但为 3 级错误)

string - Win32开发-C++中字符串相关的数据类型

python - 具有不同基础的同一模块中的两个同名类?

python - 命令行和 UI 小部件的协作