Как изменить нулевые байтовые значения с помощью Numpy? - PullRequest
0 голосов
/ 17 января 2020

У меня есть массив, который выглядит следующим образом:

array([(    0, 1579014911203, b"19'03.5", b'2'),
       (    1, 1579014911560, b"19'03.5", b'30'),
       (    2, 1579014912968, b"19'04.0", b'23'), ...,
       (14532, 1579124953407, b"19'12.0", b'15'),
       (14533, 1579124955508, b"19'11.5", b'50'),
       (14534, 1579124966108, b"19'11.5", b'27'],
      dtype={'names':['order','time','degree','speed'], 'formats':['<u4','<u8','S15','S15']})

Я могу изменить тип speed, используя astype, но как я могу изменить тип degree на float или decimal? Я хочу удалить любые символы, кроме цифр и точки. Как я могу сделать это без использования Pandas?

1 Ответ

1 голос
/ 18 января 2020

Теперь у меня нет другого пути, чем перебирать ваши данные и преобразовывать строку в допустимое число с плавающей точкой. В зависимости от обозначения вы можете использовать:

import re
import numb as np

degrees = np.zeros_like(arr['degree'], dtype=float)
for i, deg in enumerate(arr['degree']):
    # Find all numbers in the string
    numbers = re.findall(r"\d+", str(deg))

    # Transform the numbers to your desired float
    deg_new = float(numbers[0] + numbers[1] + '.' + numbers[2])
    # deg_new = int(numbers[0]) + float(numbers[1] + '.' + numbers[2])/60
    # deg_new = int(numbers[0]) + int(numbers[1])/60 + int(numbers[2])/3600
    degrees[i] = deg_new
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...