Astropy表的值数和列数之间的add_row不匹配



我有一个正在从文件中读取的天文表。为了构建一个工作示例,让我们将其设置为

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

我正在制作另一个与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具有相同列的新表的最简单方法是使用

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输入一起使用是不起作用的。你收到的错误消息肯定没有帮助,我会打开一个问题,在这种情况下提供更多信息。

需要注意的是,通常情况下,一次只做一行表会很慢,所以如果它们的表很大,那么你应该尝试另一种方法。在这种情况下,您可以执行s = t[t['a'] == 1],或者使用vstack探索选项(https://docs.astropy.org/en/stable/api/astropy.table.vstack.html)。

最新更新