使用ascii.写入()具有不同的列长度

2024-04-25 17:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

要将文本值保存到多个数组中(amp;T)。我尝试使用astropy表和ascii.write(),但得到了一个值错误。在

ValueError: Elements in list initialization must be either Column or list-like

代码:

from astropy.table import Table
from astropy.io import ascii

table = Table([x, y, propNum, inc], names=('x', 'y', 'propNum', 'inc'))

ascii.write(table, 'test4.dat')

输入:

^{pr2}$

期望输出:

6512905, -1739743, 100, 51.762
6291646, 2420707
3667192, 5656530
...      ...

Tags: from文本import错误asciitable数组list
2条回答

我建议显式地创建一个掩码表,在较短列的长度和位置上提供更大的灵活性:

x = [6512905, 6291646, 3667192, -358003, -4246455, -6512905, -6291646,  -3667192, 358003, 4246455]
y = [-1739743, 2420707, 5656530, 6731751, 5235671, 1739743, -2420707, -5656530, -6731751, -5235671]
propNum = np.concatenate([[100], np.zeros(len(x)-1, dtype='i')])
inc = np.concatenate([[51.762], np.zeros(len(x)-1)])

mtab = Table([x, y, propNum, inc], names=('x', 'y', 'propNum', 'inc'), masked=True)
mtab['propNum'][1:].mask = True
mtab['inc'][1:].mask = True
mtab.write('/dev/stdout', format='ascii', overwrite=True)

x y propNum inc
6512905 -1739743 100 51.762
6291646 2420707 "" ""
3667192 5656530 "" ""
-358003 6731751 "" ""
-4246455 5235671 "" ""
-6512905 1739743 "" ""
-6291646 -2420707 "" ""
-3667192 -5656530 "" ""
358003 -6731751 "" ""
4246455 -5235671 "" ""

但我现在可能无法在输出中隐藏这些值。在

我不确定astropy.table包是否支持生成具有不同长度列的表。在

解决这个问题的一个简单方法是在只有一个元素的列中重复值。在

from astropy.table import Table
from astropy.io import ascii


x = [6512905, 6291646, 3667192, -358003, -4246455, -6512905, -6291646,  -3667192, 358003, 4246455]
y = [-1739743, 2420707, 5656530, 6731751, 5235671, 1739743, -2420707, -5656530, -6731751, -5235671]
propNum = 100
inc = 51.762

table = Table([x, y, [propNum] * len(x), [inc] * len(x)], names=('x', 'y', 'propNum', 'inc'))

ascii.write(table, 'test4.dat')

结果是:

^{pr2}$

类似地,您可以扩展最后两列,以包含任何要向空行发出信号的字符串:

fillVal = 'NA'
propNum = [100] + [fillVal] * (len(x) - 1)
inc = [51.762] + [fillVal] * (len(x) - 1)

table = Table([x, y, propNum, inc], names=('x', 'y', 'propNum', 'inc'))
ascii.write(table, 'test4.dat')

它给出了:

x y propNum inc
6512905 -1739743 100 51.762
6291646 2420707 NA NA
3667192 5656530 NA NA
-358003 6731751 NA NA
-4246455 5235671 NA NA
-6512905 1739743 NA NA
-6291646 -2420707 NA NA
-3667192 -5656530 NA NA
358003 -6731751 NA NA
4246455 -5235671 NA NA

请注意,只有在第一行中缺少的值是而不是时,这才有效。如果是的话,你还是可以用这个方法做一些修改-

相关问题 更多 >

    热门问题