微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 QTable 保存到文件.txt、.csv 等

如何解决如何将 QTable 保存到文件.txt、.csv 等

我正在尝试将源自椭圆等光度拟合的等光度列表的 QTable 对象保存到真正的任何文件类型(.txt、.csv 等),它允许我简单地将其加载回脚本而不需要必须清洁它或任何类似的东西。

  • QTable 创建如下:
example_isolist = ellipse_example.fit_image(sclip=3.,nclip=3) #performing elliptical isophote fit and creating the Isophote list
example_isolist_tab = example_isolist.to_table() #converting to QTable
  • 我的尝试:
import json
with open("example_isolist_tab.txt",'w') as f:
    json.dump(example_isolist_tab,f,indent=2)

在此处使用 json 不起作用。出现以下错误

TypeError: Object of type QTable is not JSON serializable

这里有没有人有过 photutils 数据处理或将等值线保存到文件中的经验? 这真的应该是一件非常简单的事情,只是一种方式,这样我就不必每次想要处理等光线拟合的结果时都重新运行我的整个脚本。我的整个数据集包含 26 张图像,这意味着大约需要 2.5 小时的计算时间,中间不保存。

提前致谢!

解决方法

Astropy 已经有许多 built-in formats 用于保存带有 Table.write 的表格。

特别是对于 QTable,如果您想要一种基于文本的往返格式,强烈建议使用 ECSV 格式,因为它还会输出有关每列类型和单位的元数据。如果您使用 .ecsv 扩展名命名文件,则会自动使用此格式。例如:

>>> from astropy.table import QTable
>>> import astropy.units as u
>>> import numpy as np

>>> a = np.array([1,4,5],dtype=np.int32)
>>> b = [2.0,5.0,8.5]
>>> c = ['x','y','z']
>>> d = [10,20,30] * u.m / u.s

>>> t = QTable([a,b,c,d],...            names=('a','b','c','d'),...            meta={'name': 'first table'})

>>> t.write('table.ecsv')
>>>  print(open('table.ecsv').read())
# %ECSV 0.9
# ---
# datatype:
# - {name: a,datatype: int32}
# - {name: b,datatype: float64}
# - {name: c,datatype: string}
# - {name: d,unit: m / s,datatype: float64}
# meta:
#   __serialized_columns__:
#     d:
#       __class__: astropy.units.quantity.Quantity
#       unit: !astropy.units.Unit {unit: m / s}
#       value: !astropy.table.SerializedColumn {name: d}
#   name: first table
# schema: astropy-2.0
a b c d
1 2.0 x 10.0
4 5.0 y 20.0
5 8.5 z 30.0

>>> QTable.read('table.ecsv')
<QTable length=3>
  a      b     c      d   
                    m / s 
int32 float64 str1 float64
----- ------- ---- -------
    1     2.0    x    10.0
    4     5.0    y    20.0
    5     8.5    z    30.0
,

使用 astropy ECSV writer 无损地编写一个 QTable

>>> example_isolist_tab.write('example_isolist_tab.ecsv')
>>> t = QTable.read('example_isolist_tab.ecsv')  # returns the same table

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。