我有一个正在从文件中读取的天文表。为了构建一个工作示例,让我们将其设置为
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)
在原始版本中,row
是Table
,而不是Row
,因此将add_row()
与Table
输入一起使用是不起作用的。你收到的错误消息肯定没有帮助,我会打开一个问题,在这种情况下提供更多信息。
需要注意的是,通常情况下,一次只做一行表会很慢,所以如果它们的表很大,那么你应该尝试另一种方法。在这种情况下,您可以执行s = t[t['a'] == 1]
,或者使用vstack探索选项(https://docs.astropy.org/en/stable/api/astropy.table.vstack.html)。