Astropy table add_row val 数和列数不匹配
Astropy table add_row mismatch between number of vals and columns
我有天文现象 table 我正在读取文件。为了构建一个工作示例,让我们制作它
from astropy.table import Table, Column
t = Table(names=('a', 'b', 'c'))
t.add_row((1, 2.0, 4.2))
t.add_row((2, 5.0, 1.7))
t
我正在制作另一个 table,其列与 t
相同。
s = Table(names = t.colnames)
我想将 t
中的某些行添加到 s
row = t[t['a'] == 1]
s.add_row(row)
加注
ValueError: Mismatch between number of vals and columns
为什么会出现此错误,如何将 row
添加到 s
?
创建与 t
具有相同列的新 table 的最简单方法是
s = Table(t[0:0])
这是一个小技巧,它依赖于制作 t
的零长度版本。
您的代码 s = Table(names=t.colnames)
的一个问题是,在没有通过 dtype
参数提供任何有关数据类型的信息的情况下,此初始化程序会提供所有 float64
列。
然后要将某些行添加到 s
,您可以这样做:
for row in t[t['a'] == 1]: # Iterate over temporary table that is a subset of t
s.add_row(row)
在您的原始版本中,row
是 Table
而不是 Row
,因此将 add_row()
与 Table
输入一起使用不起作用。您收到的错误消息绝对没有帮助,在这种情况下我将打开一个问题以提供更多信息。
重要的是要注意,通常一次 table 一行会很慢,因此如果它们 table 很大,那么您应该尝试寻找其他方法。在这种情况下,您可以执行 s = t[t['a'] == 1]
,或使用 vstack (https://docs.astropy.org/en/stable/api/astropy.table.vstack.html).
探索选项
我有天文现象 table 我正在读取文件。为了构建一个工作示例,让我们制作它
from astropy.table import Table, Column
t = Table(names=('a', 'b', 'c'))
t.add_row((1, 2.0, 4.2))
t.add_row((2, 5.0, 1.7))
t
我正在制作另一个 table,其列与 t
相同。
s = Table(names = t.colnames)
我想将 t
中的某些行添加到 s
row = t[t['a'] == 1]
s.add_row(row)
加注
ValueError: Mismatch between number of vals and columns
为什么会出现此错误,如何将 row
添加到 s
?
创建与 t
具有相同列的新 table 的最简单方法是
s = Table(t[0:0])
这是一个小技巧,它依赖于制作 t
的零长度版本。
您的代码 s = Table(names=t.colnames)
的一个问题是,在没有通过 dtype
参数提供任何有关数据类型的信息的情况下,此初始化程序会提供所有 float64
列。
然后要将某些行添加到 s
,您可以这样做:
for row in t[t['a'] == 1]: # Iterate over temporary table that is a subset of t
s.add_row(row)
在您的原始版本中,row
是 Table
而不是 Row
,因此将 add_row()
与 Table
输入一起使用不起作用。您收到的错误消息绝对没有帮助,在这种情况下我将打开一个问题以提供更多信息。
重要的是要注意,通常一次 table 一行会很慢,因此如果它们 table 很大,那么您应该尝试寻找其他方法。在这种情况下,您可以执行 s = t[t['a'] == 1]
,或使用 vstack (https://docs.astropy.org/en/stable/api/astropy.table.vstack.html).