gpt4 book ai didi

python - 使用 Python 将两个 FITS 表组合到单个列条目上

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:36 25 4
gpt4 key购买 nike

我读入两个 .FITS 表并将它们放入“list_a”和“list_b”中。 List_b 是 List_a 的子集,但有一些附加的,例如“年龄”,我想添加到我的输出中。这是我目前做事的方式:

file = open("MyFile.txt","w+") 

for ii in range(100000):
name = list_B[np.where((list_A['NAME'][ii] == list_B['NAME']))]['NAME']
thing_from_b = list_B[np.where((list_A['NAME'][ii] == list_B['NAME']))]['AGE']

if (len(name) > 0) :
file.write(" {} {} \n".format(list_A['NAME'][ii], age )

file.close()

但是太慢而且笨重,我确信一定有一个更好、更Pythonic的方法。

最佳答案

假设“List_a”和“List_b”都是表,并且您希望从“List_b”中获取“List_a”和“List_b”条目的“年龄”,您可以按照您的方法使用 Pandas。但Astropy也有内置的join operation用于表格。

所以我猜你有类似的东西:

>>> from astropy.table import Table
>>> tab_a = Table({'NAME': ['A', 'B', 'C']})
>>> tab_b = Table({'NAME': ['A', 'C', 'D'], 'AGE': [1, 3, 4]})

如果您正在读取 FITS 文件,则可以使用,例如 Table.read将 FITS 表读入 Table 对象(以及其他方法)。

然后你可以使用join来连接两个名称相同的表:

>>> from astropy.table import join
>>> tab_c = join(tab_a, tab_b, keys='NAME')
>>> tab_c
<Table length=2>
NAME AGE
str1 int64
---- -----
A 1
C 3

我想这可能就是你要问的。

然后您可以将其写为 ASCII 格式(类似于您的示例),例如:

>>> import sys
>>> tab_c.write(sys.stdout, format='ascii.no_header')
A 1
C 3

(在这里您可以将 sys.stdout 替换为文件名;我只是将它用于演示目的)。正如你所看到的,有很多built-in output formats for Tables ,不过您也可以定义自己的。

Astropy 中已经有很多这样的好东西,在很多情况下,当涉及到表操作和文件格式处理时,它们应该可以帮助您避免重新发明轮子——只需仔细阅读文档即可获得更好的感觉:)

关于python - 使用 Python 将两个 FITS 表组合到单个列条目上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com