【问题标题】:convert ceilometer output to python dataframe将云高仪输出转换为 python 数据帧
【发布时间】:2015-10-29 16:56:27
【问题描述】:

我对 Python 和 openstack ceilometer 有点陌生。我正在使用以下代码读取云高仪数据:

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)

如果有人可以提供帮助,将不胜感激..

谢谢

最好的祝愿 T

【问题讨论】:

  • 如果
  • 我尝试使用 ls[ls.index("[
  • 什么是类型(ls[0])?
  • 另外,当你执行 ls2 = pandas.DataFrame(ls) 时会发生什么? (这将使您了解为什么会出现 ValueError)
  • 我有点忙 atm 但可以将DataFrame.from_items 与生成器一起使用。很快就会发布答案

标签: python json pandas openstack ceilometer


【解决方案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)

替换字符使其成为无效字典并转换为数据帧

【讨论】:

    【解决方案2】:
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2019-10-29
      • 2019-07-31
      • 2023-03-31
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多