Умножение Python MaskedColumn - PullRequest
0 голосов
/ 06 июня 2018

Я читаю в файле данных .html, и все, что я хотел бы сделать, это умножить столбец data ['ra'] на 15. Однако я получаю сообщение об ошибке: *

>>> data = ascii.read("Ldwarf.html", format="html", encoding = "ISO-8859-1")  
>>> data

<Table masked=True length=919>
designation ra  decl    
2MASS J00011217+1535355 0.0200472   +15.593194  
2MASS J00025097+2454141 0.0474917   +24.903917  
2MASS J00040288-6410358 0.0674667   -64.176611  

и

>>> data['ra'] 
<MaskedColumn name='ra' dtype='str10' length=919>
decimal hr
0.0200472
0.0474917
...
23.9783250
23.9993389

>>> data['ra'] = data['ra'].filled([-9.99])
>>> data['ra'] = data['ra']*15.

TypeError: ufunc 'multiply' did not contain a loop with signature matching 
types dtype('<U32') dtype('<U32') dtype('<U32')

Что происходит ??

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

В нем говорится, что dtype равно str10.

. Преобразуйте его в 64-разрядное вещественное число:

data['ra'] = data['ra'].astype(numpy.float64)
0 голосов
/ 06 июня 2018

Как вы можете видеть в html-файле, должно быть 918 строк, но вы получите 919. Строка с определением единиц читается как первая строка данных, и она все портит.Вот почему вы видите первое «ra» как «десятичный час» вместо числа, а тип данных столбца выводится как dtype = 'str10'.

Вы можете использовать аргумент "data_start", чтобы отброситьпроблемная строка:

data = ascii.read("Ldwarf.html", 
                  format="html", 
                  encoding="ISO-8859-1", 
                  data_start=2)

Теперь типы ввода выводятся правильно, и у вас не должно возникнуть проблем с умножением на 15 "ra".

0 голосов
/ 06 июня 2018

Я не могу воспроизвести вашу проблему, но я считаю, что данные ['ra'] не содержат числового типа.Это похоже на строку в юникоде.

Если это так, то это можно решить, явно указав тип перед умножением:

data ['ra'] = float (data['ra'])

РЕДАКТИРОВАТЬ: Хорошо, тогда он содержит массив, поэтому вам нужно изменить тип совместимым образом:

data ['ra'] = np.asarray (data [' ra '], dtype =' float64 ')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...