У меня есть код, который читает файл значений, разделенных табуляцией (tsv), который отлично работает, когда первый столбец является числом, но терпит неудачу, когда это строка.
import os
import numpy as np
input_file = os.path.normpath('C:/Users/sturaroa/Documents/PycharmProjects/my_file.tsv')
# read values from file, by column
my_data = np.genfromtxt(input_file, delimiter='\t', skip_header=0)
print('my_data\n' + str(my_data))
groups = my_data[:, 0] # 1st column
X = my_data[:, 1] # 2nd column
Y = my_data[:, 2] # 3rd column
errors = my_data[:, 3] # 4th column (errors)
print('\ngroups ' + str(groups) + '\nX ' + str(X) + '\nY ' + str(Y) + '\nerrors ' + str(errors))
Это содержимое файла (разделено табуляцией)
2.4 2 4.0 0.0
2.4 4 8.210526 0.7254761
2.9 4 8.4 0.8081221
2.9 6 12.52 1.0544369
Программа печатает это
my_data
[[ 2.4 2. 4. 0. ]
[ 2.4 4. 8.210526 0.7254761]
[ 2.9 4. 8.4 0.8081221]
[ 2.9 6. 12.52 1.0544369]]
groups [ 2.4 2.4 2.9 2.9]
X [ 2. 4. 4. 6.]
Y [ 4. 8.210526 8.4 12.52 ]
errors [ 0. 0.7254761 0.8081221 1.0544369]
Я видел этот вопрос, предлагающий использовать dtype=None
. Однако, если я это сделаю, я получаю эту ошибку
Traceback (most recent call last):
File "C:/Users/sturaroa/Documents/PycharmProjects/2d_plot_test.py", line 11, in <module>
groups = my_data[:, 0] # 1st column
IndexError: too many indices for array
Мне нужно настроить свой код для работы с таким вводом
something 2 4.0 0.0
something 4 8.210526 0.7254761
some_other_thing 8.4 0.8081221
some_other_thing 12.52 1.0544369
Этот первый столбец представляет собой строку переменной длины, остальные столбцы — числа (целые или с плавающей запятой).
Я использую numpy 1.9.2 на Python 2.7.