преобразовать выходные данные облакомера в фрейм данных python

Я немного новичок в Python и ceilometer openstack. Я читаю данные облакомера, используя следующий код:

import ceilometerclient.client

cclient = ceilometerclient.client.get_client(2, os_username="Ceilometeradmin", os_password="blahblah", os_tenant_name="blahblah", os_auth_url="http://xxx.xx.xx.x:5000/v2.0")

query = [dict(field='resource_id', op='eq', value='dd893564-85e5-43f8-a384-086417f1d82c')]

ls = cclient.meters.list(q=query)

(Пожалуйста, смотрите изображение вывода прилагается)

введите здесь описание изображения

Кто-нибудь знает, как я могу преобразовать это в фреймворк данных?

Я пробовал: ls2 = pandas.DataFrame(ls, columns=["user_id", "name", "resource_id", "source", "meter_id", "project_id", "type", "unit"])

но получите следующую ошибку:

Traceback (most recent call last):
File "", line 1, in File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 250, in init copy=copy)
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 363, in _init_ndarray return create_block_manager_from_blocks([values.T], [columns, index])
File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 3750, in create_block_manager_from_blocks construction_error(tot_items, blocks[0].shape[1:], axes, e)
File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 3732, in construction_error passed,implied))
ValueError: Shape of passed values is (1, 2), indices imply (8, 2)

если бы кто-то мог помочь, это было бы очень признательно ..

Спасибо

С наилучшими пожеланиями Т


person tezzaaa    schedule 29.10.2015    source источник
comment
Если бы части ‹Meter не было (т.е. если бы у вас был список словарей), ваш код работал бы.   -  person jgloves    schedule 29.10.2015
comment
Я попытался удалить его с помощью ls[ls.index([‹Meter)] = ', но он выдает ошибку:   -  person tezzaaa    schedule 29.10.2015
comment
что такое тип (ls [0])?   -  person jgloves    schedule 29.10.2015
comment
Кроме того, что происходит, когда вы делаете ls2 = pandas.DataFrame(ls)? (Это даст вам представление о том, почему вы получили этот ValueError)   -  person jgloves    schedule 29.10.2015
comment
это тип списка; он возвращает это, когда я пытаюсь преобразовать в pandas.dataframe: 0 0 ‹Meter {u'user_id': u'f82bcc547ffd4bf0ae28c452... 1 ‹Meter {u'user_id': u'f82bcc547ffd4bf0ae28c452...   -  person tezzaaa    schedule 29.10.2015
comment
не уверен, что это значит?   -  person tezzaaa    schedule 29.10.2015
comment
Я немного занят банкоматом, но можно использовать DataFrame.from_items с генератором. Скоро опубликую ответ   -  person Lim H.    schedule 29.10.2015


Ответы (1)


С помощью коллеги нам удалось найти решение. Я публикую его на случай, если он будет полезен всем, кто пытается преобразовать данные облакомера в фрейм данных.

ls2 = str(ls)[8:-2]
tmp = ls2.replace("u'","'")
tmp = tmp.replace("<Meter","")
tmp = tmp.replace("}>","}")
tmp= "["+tmp+"]"
tmp = tmp.replace("'", "\"")
parsed = json.loads(tmp)
ls3 = pandas.DataFrame(parsed)

Заменены символы, которые делают его недействительным словарем и преобразуют в фрейм данных.

person tezzaaa    schedule 30.10.2015