Python读取.txt并放入一个numpy数组

时间:2017-02-18 20:04:32

标签: python arrays numpy

我想用numpy创建一个数组。 基数是.txt文件,以下列形式给出: enter image description here

我用loadtxt尝试了它:

data = np.loadtxt("myfile.txt",delimiter='\n',skiprows = 1)

与#34; Zeit"的第一行和"信号"应该跳过我只需要这种形式的数组:

[[0,1],[0.01,2],[0.02,3]]

来自" Zeit"的价值观和"信号用标签分开。

我收到了这个错误:

ValueError: could not convert string to float: 

4 个答案:

答案 0 :(得分:0)

看起来你不应该通过delimiter='\n'参数。当我查看loadtxt documentation时,这个参数似乎指定了一行上的值的分隔符,而不是行的分隔符。 ...并且在没有该论据的情况下调用相同的函数对我有效。

答案 1 :(得分:0)

你可以运行以下内容并报告它返回的内容吗?具体来说,bag中的内容是什么?

bag = []
i = 0
def probe(bit):
    global i
    i += 1
    try:
        return float(bit)
    except:
        bag.append((i, bit))
        return np.nan

data = np.loadtxt('myfile.txt', skiprows=1, converters={0:probe, 1:probe})

好的,试试:

import itertools
data = np.loadtxt(itertools.filterfalse(lambda x: len(x.split())!=2, open('myfile.txt')), skiprows=1)

答案 2 :(得分:0)

这应该可以解决您的问题

data = np.genfromtxt("myfile.txt",skip_header = 1,dtype=None,)
data = [list(i) for i in data]

答案 3 :(得分:0)

我错误地尝试将您的文件重新创建为

Zeit\tSignal
0.01\t1.1
0.02\t1.105
0.03\t1.108
0.04\t1.2
0.05\t1.205
0.06\t1.209

载入:

data=np.loadtxt('test.txt', skiprows=1)

得到了:

ValueError: could not convert string to float: b'0.01\\t1.1'

将字符串\t更改为实际制表符(难以通过copy-n-paste传达此内容):

In [474]: data=np.loadtxt('test.txt', skiprows=1)
In [475]: data
Out[475]: 
array([[ 0.01 ,  1.1  ],
       [ 0.02 ,  1.105],
       [ 0.03 ,  1.108],
       [ 0.04 ,  1.2  ],
       [ 0.05 ,  1.205],
       [ 0.06 ,  1.209]])

确保您的文件只包含这些字符(列之间有空格或实际标签)。它应该是纯ASCII,而不是RTF或其他格式化的测试。

可能值得尝试一个字符串dtype只是为了看看是否有一些有趣的chacacters正在提出问题,例如。

In [478]: data=np.loadtxt('test.txt', dtype=str)
In [479]: data
Out[479]: 
array([["b'Zeit'", "b'Signal'"],
       ["b'0.01'", "b'1.1'"],
       ["b'0.02'", "b'1.105'"],
       ["b'0.03'", "b'1.108'"],
       ["b'0.04'", "b'1.2'"],
       ["b'0.05'", "b'1.205'"],
       ["b'0.06'", "b'1.209'"]], 
      dtype='<U9')