首页 > 解决方案 > 如何将csv文件中的列表转换为numpy数组

问题描述

我有一个 csv 文件,如下所示

[0.037621960043907166, 0.04622473940253258, 0.9161532521247864]
[0.030109738931059837, 0.03261643648147583, 0.9372738003730774]
[0.030109738931059837, 0.03261643648147583, 0.9372738003730774]

我需要将其转换为 numpy 数组。如果我使用下面的代码

data = genfromtxt(file, delimiter=',', encoding="utf8")

我进入nan输出。

如果我这样做

np.genfromtxt (file, encoding=None, dtype = None)

它无法删除列表的开始和结束括号,并输出如下

array = ([['[0.037621960043907166,', '0.04622473940253258,',
        '0.9161532521247864]'],
       ['[0.030109738931059837,', '0.03261643648147583,',
        '0.9372738003730774]'],
       ['[0.030109738931059837,', '0.03261643648147583,',
        '0.9372738003730774]']], dtype='<U22')

预期的输出是

array = ([['0.037621960043907166,', '0.04622473940253258,',
            '0.9161532521247864'],
           ['0.030109738931059837,', '0.03261643648147583,',
            '0.9372738003730774'],
           ['0.030109738931059837,', '0.03261643648147583,',
            '0.9372738003730774']], dtype='<U22')

如何获得预期的输出?似乎我需要在应用 numpy 操作之前先删除括号。有什么建议吗?

标签: pythonnumpycsv

解决方案


只要你知道内容的格式,我想一个简单的切片就可以了

import numpy as np

tmp = open('tmp', 'r').readlines()
tmp = np.array([[float(num) for num in item[1:-2].split(',')] for item in tmp])

推荐阅读