乘以 Python MaskedColumn
Multiplying a Python MaskedColumn
我正在读取 .html 数据文件,我想做的就是将数据 ['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')
这是怎么回事??
我无法重现您的问题,但我弥补了数据 ['ra'] 不包含数字类型。它看起来像一个 unicode 字符串。
如果是这种情况,可以通过在相乘前显式指定类型来解决:
data['ra'] = float(data['ra'])
编辑:好的,那么它包含一个数组,所以你需要以兼容的方式修改类型:
data['ra']= np.asarray(data['ra'], dtype='float64')
它说 dtype
是 str10
。
将其转换为 64 位实数:
data['ra'] = data['ra'].astype(numpy.float64)
正如您在 html 文件中看到的那样,应该有 918 行,但您得到了 919 行。具有单位定义的行被读取为第一个数据行,它弄乱了所有内容。这就是为什么您将第一个 "ra" 视为 "decimal hr" 而不是数字,并且列数据类型被推断为 dtype='str10'.
的原因
您可以使用 "data_start" 参数来丢弃有问题的行:
data = ascii.read("Ldwarf.html",
format="html",
encoding="ISO-8859-1",
data_start=2)
现在可以正确推断输入类型,"ra".
乘以 15 应该没有任何问题
我正在读取 .html 数据文件,我想做的就是将数据 ['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')
这是怎么回事??
我无法重现您的问题,但我弥补了数据 ['ra'] 不包含数字类型。它看起来像一个 unicode 字符串。
如果是这种情况,可以通过在相乘前显式指定类型来解决:
data['ra'] = float(data['ra'])
编辑:好的,那么它包含一个数组,所以你需要以兼容的方式修改类型:
data['ra']= np.asarray(data['ra'], dtype='float64')
它说 dtype
是 str10
。
将其转换为 64 位实数:
data['ra'] = data['ra'].astype(numpy.float64)
正如您在 html 文件中看到的那样,应该有 918 行,但您得到了 919 行。具有单位定义的行被读取为第一个数据行,它弄乱了所有内容。这就是为什么您将第一个 "ra" 视为 "decimal hr" 而不是数字,并且列数据类型被推断为 dtype='str10'.
的原因您可以使用 "data_start" 参数来丢弃有问题的行:
data = ascii.read("Ldwarf.html",
format="html",
encoding="ISO-8859-1",
data_start=2)
现在可以正确推断输入类型,"ra".
乘以 15 应该没有任何问题