从Python中的不完整表中读取值

时间:2018-04-12 16:14:00

标签: python file

我需要从Python中的表中读取一些值。我需要的列是最后一列,但是很多行没有填充所有值。这是其中的一部分,我需要阅读最后一栏中的数字。

XMSJ 233156.2+195123 23 31 56.2 +19 51 22.6  22.98  22.06  21.15       Y BLAGN 0.718
XMSJ 233158.7+194440 23 31 58.8 +19 44 39.2  23.47  22.24  21.21       Y BLAGN 1.418
XMSJ 233201.5+200406 23 32 01.5 +20 04 06.4                            Y BLAGN 1.517
XMSJ 233203.2+200626 23 32 03.2 +20 06 27.7  21.07  20.36  20.12 19.30 Y BLAGN 1.901
XMSJ 233207.3+200529 23 32 07.4 +20 05 29.1  22.26  21.61  21.48       Y BLAGN 1.897
XMSJ 233209.8+194517 23 32 09.8 +19 45 17.4  20.26  19.05  18.37 19.30 Y BLAGN 2.027

我尝试了这个data = np.genfromtxt(dataset, unpack=True, usecols=(14,), invalid_raise=False),但这只是跳过了不完整的行,而我仍然想要这些值(此处的输出为NA NA NA 1.901 NA 2.027,而我需要0.718 1.418 1.517 1.901 1.897 2.027。有人告诉我该怎么做?谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题是np.genfromtxt不知道如何处理空白字段。据它了解,任何连续的空格都被压扁为一个空格,并且无法猜出哪个值应该是哪个字段。

这是从numpy.genfromtxt documentation开始的:“当空格用作分隔符时,或者没有给定分隔符作为输入时,两个字段之间不应该有任何丢失的数据。”

如果行中的字段长度恒定,您可以做的是首先明确地将行拆分为所需的列:

rows = []
with open('table.txt') as table_file:
    for line in table_file:
        row = [
            line[0:4],  # XMSJ
            line[5:20], # 233156.2+195123
            # etc.
        ]

        # TODO: find blank values within the row; and replace them
        # with None, NaN, or some other appropriate dummy value.
        # Left as an exercise for you.

        rows.append(row)

data = np.array(rows) # but of course you probably want to type-cast the columns properly, also left as an exercise.