gpt4 book ai didi

python - 为 ASCII 数据添加名称和分配数据类型

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:24 24 4
gpt4 key购买 nike

我的教授使用 IDL 并向我发送了一个 ASCII 数据文件,我需要最终能够读取和操作该文件。

他使用以下命令读取数据:

readcol, 'sn-full.txt', format='A,X,X,X,X,X,F,A,F,A,X,X,X,X,X,X,X,X,X,A,X,X,X,X,A,X,X,X,X,F,X,I,X,F,F,X,X,F,X,F,F,F,F,F,F', $
sn, off1, dir1, off2, dir2, type, gal, dist, htype, d1, d2, pa, ai, b, berr, b0, k, kerr

这是前两行的图片:http://i.imgur.com/hT7YIE3.png

因为我不想成为一名天文学家,所以我正在使用 Python,但由于我是新手,所以我很难阅读数据。

我知道他的代码将数据类型 A(字符串数据)分配给第一列,使用 X 跳过第二列 - 第六列,然后将数据类型 F( float )分配给第七列,等等。然后sn 分配给未跳过的第一列,等等。

我一直在尝试使用 numpy.loadtxt("sn-full.txt")ascii.read("sn-full.txt") 但我不确定如何输入 dtype 参数。我知道我可以将所有内容分配给某种数据类型,但如何将数据类型分配给各个列?

最佳答案

使用 astropy.io.ascii 你应该能够相对轻松地阅读你的文件:

from astropy.io import ascii
# Give names for ALL of the columns, as there is no easy way to skip columns
# for a table with no column header.
colnames = ('sn', 'gal_name1', 'gal_name2', 'year', 'month', 'day', ...)
table = ascii.read('sn_full.txt', Reader=ascii.NoHeader, names=colnames)

这为您提供了一个包含所有数据列的表格。事实上,你有一些你不需要的列不是问题,除非表格是大行长。对于您显示的表格,您不需要明确指定数据类型,因为 io.ascii.read 会正确地计算出它们。

这里有一个小问题是您显示的表格实际上是一个固定宽度的表格,这意味着所有列都垂直排列。请注意,第一行以 1998S NGC 3877 开头。只要每一行都有相同的模式,三个以空格分隔的列将超新星名称和星系名称表示为两个词,就可以了。但是,如果任何一个星系名称是一个单词,那么解析就会失败。我怀疑如果 IDL readcol 正常工作,那么相应的 io.ascii 版本应该开箱即用。如果不是,那么 io.ascii 有一种读取固定宽度表格的方法,您可以在其中明确提供列名和位置。

[编辑]看起来在这种情况下需要一个固定宽度的阅读器来通知解析器如何拆分列而不是仅仅使用空格作为分隔符。所以基本上你需要在表文件的顶部添加两行,其中第一行给出列名,第二行有指示每列跨度的破折号:

  a       b          c        
---- ------------ ------
1.2 hello there 2
2.4 worlds 3

astropy.io.ascii 中,如果您没有修改输入数据文件的选项,也可以通过代码指定每一列的开始和结束位置,例如:

>>> ascii.read(table, Reader=ascii.FixedWidthNoHeader,
names=('Name', 'Phone', 'TCP'),
col_starts=(0, 9, 18),
col_ends=(5, 17, 28),
)

关于python - 为 ASCII 数据添加名称和分配数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529502/

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