2015-10-29 11 views
3

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

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) 

(смотрите изображение продукции прилагается)

enter image description here

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

Я пробовал: 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) 

если кто-то может помочь было бы действительно быть очень высоко ценится ..

Спасибо

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

+0

Если <Метр часть не была там (то есть, если у вас есть список dicts), ваш код будет работать. – jgloves

+0

Я попытался удалить его с помощью ls [ls.index ("[ tezzaaa

+0

что такое тип (ls [0])? – jgloves

ответ

1

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

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) 

замененные символы, которые делают его недействительным словарь и конвертированы в dataframe

0
meters = c.meters.list() 
fields = ['user_id', 'name', 'resource_id', 'source', 'meter_id', 'project_id', 'type', 'unit'] 
converted_meters = [dict([(key, getattr(m, key, None))]) for m in meters for key in fields] 
data_frame = pandas.DataFrame(converted_meters)