С вашим образцом и dtype
:
In [1]: np.genfromtxt('stack55810419.txt', dtype=(object, object, int,float,floa
...: t))
Out[1]:
array([(b'HIP893', b'23_10', 7, 0.028 , 4.),
(b'HIP1074', b'43_20', 20, 0.0141 , 1.),
(b'HIP1325', b'23_10', 7, 0.02388, 5.)],
dtype=[('f0', 'O'), ('f1', 'O'), ('f2', '<i8'), ('f3', '<f8'), ('f4', '<f8')])
С dtype=None
(и encoding=None
):
In [5]: np.genfromtxt('stack55810419.txt', dtype=None, encoding=None)
Out[5]:
array([('HIP893', 2310, 7, 0.028 , 4),
('HIP1074', 4320, 20, 0.0141 , 1),
('HIP1325', 2310, 7, 0.02388, 5)],
dtype=[('f0', '<U7'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<f8'), ('f4', '<i8')])
Указание типов юникода (необходимо указать размер):
In [6]: np.genfromtxt('stack55810419.txt', dtype=('U7', 'U7', int,float,float))
Out[6]:
array([('HIP893', '23_10', 7, 0.028 , 4.),
('HIP1074', '43_20', 20, 0.0141 , 1.),
('HIP1325', '23_10', 7, 0.02388, 5.)],
dtype=[('f0', '<U7'), ('f1', '<U7'), ('f2', '<i8'), ('f3', '<f8'), ('f4', '<f8')])
Я озадачен тем, почему в случае None
выбирается целочисленный тип d для второго столбца (подчеркивание должно было предотвратить это).
dtype=None
безПараметр encoding вызывает это предупреждение:
/ usr / local / bin / ipython3: 1: VisibleDeprecationWarning: чтение строк Юникода без указания аргумента кодирования не рекомендуется.Установите кодировку, используйте None для системного значения по умолчанию.
В Py2 тип строки по умолчанию - bytestrings;в Py3 Unicode.genfromtxt
использовал bytestrings
в совместимости с py2.Но в последних версиях добавлен параметр encoding
.Но, похоже, в этом преобразовании все еще есть некоторые неровности.
Возможно, поэтому я получил i8
;Собственный Python int
принимает подчеркивание.
In [20]: int('23_10')
Out[20]: 2310