Конвертировать таблицу астропии в список словарей - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть объект astropy.table.table, содержащий данные звезд.Одна строка на звезду со столбцами, содержащими такие данные, как имя звезды, максимальная величина и т. Д.

Я понимаю, что внутреннее представление таблицы астропии - это диктат для каждого столбца, причем строки возвращаются на лету в виде срезов черезобъекты dict.

Мне нужно преобразовать таблицу астропии в список объектов dict Python, по одному дикту на звезду.По сути, это и транспонирование таблицы, и конверсия.

Я, очевидно, могу перебирать таблицу по столбцу в строке, чтобы построить диктанты и добавить их в список, но я надеялся, чтоболее эффективный способ? '

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Если вы ищете более компактный и запоминающийся способ, вы можете преобразовать таблицу в pandas.DataFrame и использовать to_dict метод pandas DataFrame.Возможно, не очень эффективно копировать таблицу в новый объект, но в зависимости от формата, в который вы хотите конвертировать, панды могут быть гораздо удобнее.Астропийные таблицы имеют удобные to_pandas и from_pandas методы.

>>> from astropy.table.table_helpers import simple_table
>>> simple_table().to_pandas().to_dict(orient='records')
[{'a': 1, 'b': 1.0, 'c': 'c'},
 {'a': 2, 'b': 2.0, 'c': 'd'},
 {'a': 3, 'b': 3.0, 'c': 'e'}]
0 голосов
/ 21 июня 2019

Я закончил итерацией, нарезкой и копированием в виде списка, который отлично работал на относительно небольшом наборе данных.

0 голосов
/ 09 декабря 2018

Вот идея.Я не уверен, что вы можете быть намного более эффективным, за исключением того, что таблица большая, лучше сначала преобразовать ее в чистый массив Numpy с помощью .as_array():

In [1]: from astropy.table.table_helpers import simple_table

In [2]: t = simple_table()

In [3]: t
Out[3]: 
<Table length=3>
  a      b     c  
int64 float64 str1
----- ------- ----
    1     1.0    c
    2     2.0    d
    3     3.0    e

In [4]: names = t.colnames

In [5]: [dict(zip(names, row)) for row in t]
Out[5]: 
[{'a': 1, 'b': 1.0, 'c': 'c'},
 {'a': 2, 'b': 2.0, 'c': 'd'},
 {'a': 3, 'b': 3.0, 'c': 'e'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...