dtype=None
рассказывает genfromtxt
, чтобы угадать соответствующий тип.
От the docs:
dtype: dtype, optional
Data type of the resulting array. If None, the dtypes will be determined by the contents of each column, individually.
(. Курсив мой)
Поскольку ваши данные разделенных запятыми, не забудьте включить delimiter=','
или иначе np.genfromtxt
будет интерпретировать каждый столбец (execpt последний), в том числе строковый символ (запятая) и, следовательно, ошибочно назначать строковый dtype для каждого из этих столбцов.
Например:
import numpy as np
arr = np.genfromtxt('data', dtype=None, delimiter=',')
print(arr.dtype)
# [('f0', '<f8'), ('f1', 'S4'), ('f2', '<i4'), ('f3', '<f8'), ('f4', '<f8')]
Это показывает имена и dtypes каждого столбца. Например, ('f3', <f8)
означает, что четвертая колонка имеет имя 'f3'
и имеет dtype '< i4. Значение i
означает, что это целочисленный тип dtype. Если вам нужен третий столбец для float dtype, тогда есть несколько вариантов.
- Вы можете вручную редактировать данные, добавляя десятичную точку в третьей колонке, чтобы заставить genfromtxt интерпретировать значения в этом столбце , чтобы быть флоат DTYPE.
Вы можете поставить DTYPE явно в вызове genfromtxt
arr = np.genfromtxt(
'data', delimiter=',',
dtype=[('f0', '<f8'), ('f1', 'S4'), ('f2', '<f4'), ('f3', '<f8'), ('f4', '<f8')])
print(arr)
# [(999.9, ' abc', 34, 78.0, 12.3) (1.3, ' ghf', 12, 8.4, 23.7)
# (101.7, ' evf', 89, 2.4, 11.3)]
print(arr['f2'])
# [34 12 89]
Сообщение об ошибке IndexError: invalid index
генерируется линией
ionenergy = y[:,0]
Когда у вас есть смешанные типы, np.genfromtxt
возвращает structured array. Вам нужно прочитать структурированные массивы, потому что синтаксис для доступа к столбцам отличается от синтаксиса, используемого для простых массивов однородного типа.
Вместо y[:, 0]
, чтобы получить доступ к первому колонку структурированного массива y
, используйте
y['f0']
Или, еще лучше, поставить параметр names
в np.genfromtxt
, так что вы можете использовать более соответствующее имя столбца, как y['ionenergy']
:
import numpy as np
arr = np.genfromtxt(
'data', delimiter=',', dtype=None,
names=['ionenergy', 'foo', 'bar', 'baz', 'quux', 'corge'])
print(arr['ionenergy'])
# [ 999.9 1.3 101.7]
Спасибо, но я тоже попробовал, и он не работал. – user2483176
Каков был результат dtype? Был ли какой-либо текст в столбцах, которые должны быть 'float'? Вы использовали 'names' или' skip_header' для обработки заголовка (если таковой был)? – unutbu
У меня нет заголовка. Использование dtype = None, я получаю ошибку недопустимого диапазона индексов, когда пытаюсь назначить каждый столбец. Кроме того, в столбце нет текста, который должен быть просто плавающим. – user2483176