Астропия таблицы add_row несоответствие между количеством значений и столбцов - PullRequest
0 голосов
/ 04 марта 2020

У меня есть таблица астропии, которую я читаю из файла. Для построения рабочего примера давайте сделаем это

from astropy.table import Table, Column


t = Table(names=('a', 'b', 'c'))
t.add_row((1, 2.0, 4.2))
t.add_row((2, 5.0, 1.7))
t

Я создаю другую таблицу с такими же столбцами, как t.

s = Table(names = t.colnames)

И я бы хотел добавить определенные строки из t в s

row = t[t['a'] == 1]
s.add_row(row)

повышает

ValueError: Mismatch between number of vals and columns

Почему я получаю эту ошибку, и как я могу добавить row к s?

1 Ответ

2 голосов
/ 05 марта 2020

Самый простой способ создать новую таблицу с теми же столбцами, что и t, - это

s = Table(t[0:0])

Это небольшой трюк, основанный на создании версии t нулевой длины.

Одна проблема с вашим кодом s = Table(names=t.colnames) состоит в том, что без предоставления какой-либо информации о типах данных с помощью параметра dtype этот инициализатор дает все float64 столбцы.

Затем для добавления определенных строк на s вы должны сделать:

for row in t[t['a'] == 1]:  # Iterate over temporary table that is a subset of t  
    s.add_row(row)

В исходной версии row является Table, а не Row, поэтому использование add_row() с вводом Table не работает , Полученное вами сообщение об ошибке определенно бесполезно, и я открою проблему, чтобы сделать это более информативным в этом случае.

Важно отметить, что в общем случае создание таблицы по одной строке за раз будет медленным , так что если они большие, то вы должны попытаться найти другой путь. В этом случае вы можете выполнить s = t[t['a'] == 1] или изучить параметры с помощью vstack (https://docs.astropy.org/en/stable/api/astropy.table.vstack.html).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...