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)

在您的原始版本中,rowTable 而不是 Row,因此将 add_row()Table 输入一起使用不起作用。您收到的错误消息绝对没有帮助,在这种情况下我将打开一个问题以提供更多信息。

重要的是要注意,通常一次 table 一行会很慢,因此如果它们 table 很大,那么您应该尝试寻找其他方法。在这种情况下,您可以执行 s = t[t['a'] == 1],或使用 vstack (https://docs.astropy.org/en/stable/api/astropy.table.vstack.html).

探索选项