Мой вопрос в основном состоит в том, что задается (и не отвечает) в «Q2» this previous question.Изменение dtype строковых массивов нулей из строковых данных
У меня есть структурированный массив со столбцом строк и столбцом целых чисел. Я заменяю строки целыми числами с помощью dict, но поскольку тип этого столбца не изменяется, целые числа записываются как строки. Я могу изменить dtype столбца на целое число, но тогда все строки преобразуются в 0 вместо целых значений в каждой строке. Как изменить столбец таким образом, чтобы целочисленные значения не были потеряны во время преобразования dtype?
Я создал иллюстративный пример:
dat = np.array([('1', 3392),('2', 4159),('1', 1093),('1', 9836)], dtype=[('code', 'U24'),('id', 'i2')])
dat.astype(dtype=[('code', 'i4'), ('id', 'i2')])
Но по причинам, я не могу понять, это на самом деле работает, получая:
array([(1, 3392), (2, 4159), (1, 1093), (1, 9836)],
dtype=[('code', '<i4'), ('id', '<i2')])
Это то, что я хочу! Вместо этого, по некоторым причинам, я получаю эквивалент:
array([(0, 3392), (0, 4159), (0, 1093), (0, 9836)],
dtype=[('code', '<i4'), ('id', '<i2')])
Что может вызвать все значения «код», чтобы быть обнулены, как это, если на самом деле, это не ожидаемый результат от ndarray.astype
? Благодарю. (В случае, если это актуально, я использую Python 3.)
EDIT: Вот моментальный снимок фактических данных после обработки с помощью dict.
array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),...
('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
('2', 9932), ('1', 3044), ('1', 2769)],
dtype=[('name', '<U24'), ('id', '<i2')])
Примеры данных об отказах? – Veedrac
Я не могу поделиться оригинальными данными или фактическим dict, который я использовал для соображений неприкосновенности частной жизни, но я отредактировал исходный вопрос с куском данных после запуска его через dict. – trynthink