2017-02-18 8 views
0

Я хочу создать массив с numpy. База представляет собой .txt файл, который приводится в следующем виде: enter image description herePython readin .txt и помещен в массив с numpy

я попытался его с loadtxt:

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

Первая строка с «Zeit» и «Сигнал» должен быть пропущен I нужно только массив в таком виде:

[[0, 1], [0,01, 2], [0,02, 3]]

Значения от "Zeit" и «Сигнал разделяются с вкладкой.

я получил эту ошибку:

ValueError: could not convert string to float: 
+0

В этом случае разделителем является пробел, а не символ новой строки. Удалите параметр для разделителя, так как значением по умолчанию является любое пробельное пространство. – justincai

+0

'delimiter' предназначен для разделения столбцов, но вы передаете ему новую строку. Попробуйте удалить это, поведение по умолчанию должно работать в вашем случае. –

+0

Для разделителя вкладок используйте 'delimiter = '\ t'' – hpaulj

ответ

0

Похоже, что вы не должны быть пропусканием delimiter='\n' аргумента. Поскольку я рассматриваю loadtxt documentation, этот аргумент, как представляется, указывает разделитель значений на строке, а не разделитель строк. ... и вызов той же функции без этого аргумента работал для меня.

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) 
+0

return float (бит): ^^СинтаксисError: недействительный синтаксис – Nekoso

+0

@Nekoso, к сожалению, попробуйте удалить двоеточие. –

+0

ok Я попробовал еще раз: ValueError: Неправильное количество столбцов в строке 7 – Nekoso

0

Это должно решить вашу проблему

data = np.genfromtxt("myfile.txt",skip_header = 1,dtype=None,) 
data = [list(i) for i in data] 
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 к реальным закладкам (трудно передать это с помощью копирования-н-паста):

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, чтобы увидеть, не вызывает ли только несколько забавных символов, например.

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')