Python передать вывод оператора для оценки в другом операторе - PullRequest
0 голосов
/ 08 мая 2020

Попытка получить вывод кода и передать его другому оператору.

t = ", ".join(DTYPE)
output = ('data', list), ('freq', str)

Хотелось бы использовать «вывод» и передать следующее:

DF_TYPE = numpy.dtype([t)])
DF = numpy.empty(0, dtype=DF_TYPE)

То есть , оценить

DF_TYPE = numpy.dtype([('data', list), ('freq', str)])
DF = numpy.empty(0, dtype=DF_TYPE)

Получена ошибка:

Exception has occurred: TypeError
data type not understood

Примеры данных:

JSON_DATA = {
  "data": [
    {
      "Members": 29,
      "period": "2020-06-30",
      "TCOC": 5880070,
    },
    {
      "Members": 21,
      "period": "2020-03-31",
      "TCOC": 5689074,
    }
  ],
  "freq": "quarterly"
}

Пробовали использовать exe c () и eval (), чтобы не было доступно

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Похоже, мне нужно 50 представителей, чтобы прокомментировать. Но не могли бы вы предоставить дополнительную информацию, например данные об игрушках или сообщения об ошибках? Спасибо

Кроме того, я заметил, что вы называете numpy как numpy и np. Система распознает только то, что написано в вашем операторе импорта:

import numpy обозначается как numpy.whatever, а import numpy as np обозначается как np.whatever

0 голосов
/ 08 мая 2020

С некоторыми исправлениями эти создания структурированных массивов работают:

In [244]: dt = np.dtype([('data',object), ('freq', 'U10')])                                            
In [245]: x = np.empty(3, dtype=dt)                                                                    
In [246]: x                                                                                            
Out[246]: 
array([(None, ''), (None, ''), (None, '')],
      dtype=[('data', 'O'), ('freq', '<U10')])

или данные в виде списка кортежей:

In [247]: x = np.array([([1,2,3], 'quarterly'), ([4,5], 'yearly')], dt)                                
In [248]: x                                                                                            
Out[248]: 
array([(list([1, 2, 3]), 'quarterly'), (list([4, 5]), 'yearly')],
      dtype=[('data', 'O'), ('freq', '<U10')])
In [249]: x['data']                                                                                    
Out[249]: array([list([1, 2, 3]), list([4, 5])], dtype=object)

и со словарем JSON_DATA:

In [251]: JSON_DATA['data']                                                                            
Out[251]: 
[{'Members': 29, 'period': '2020-06-30', 'TCOC': 5880070},
 {'Members': 21, 'period': '2020-03-31', 'TCOC': 5689074}]

In [254]: x = np.empty(2, dt)                                                                          
In [255]: x['data'] = JSON_DATA['data']                                                                
In [256]: x['freq'] = JSON_DATA['freq']                                                                

In [257]: x                                                                                            
Out[257]: 
array([({'Members': 29, 'period': '2020-06-30', 'TCOC': 5880070}, 'quarterly'),
       ({'Members': 21, 'period': '2020-03-31', 'TCOC': 5689074}, 'quarterly')],
      dtype=[('data', 'O'), ('freq', '<U10')])
In [258]: x['data']                                                                                    
Out[258]: 
array([{'Members': 29, 'period': '2020-06-30', 'TCOC': 5880070},
       {'Members': 21, 'period': '2020-03-31', 'TCOC': 5689074}],
      dtype=object)

Элемент поля data на самом деле является словарем:

In [259]: x['data'][0]                                                                                 
Out[259]: {'Members': 29, 'period': '2020-06-30', 'TCOC': 5880070}
...