【问题标题】:Create dataframe from a dictionary in python when the key is a byte?当键是字节时,从python中的字典创建数据框?
【发布时间】:2020-08-25 08:23:41
【问题描述】:

我想从字典中的特定数据创建一个数据框。关键是一个字节,我不明白如何“以有用的方式从字节中获取信息”。如果我可以将我需要的数据放入数据框中,我就会知道如何处理它(排序、绘图等)

我有这本词典:

{'SequenceNumber': 2654504175, 'Offset': '67826126730624', 'EnqueuedTimeUtc': '7/10/2020 1:18:00 PM', 'SystemProperties': {}, 'Properties': {}, 'Body': b'{"id": "MicroSCADA OPC DA.S_M.APL.1.P.P_R_P.1", "ts": "2020-07-10T13:17:24.654000", "value": 1.1293551921844482, "status_code": 0}'}

这是读取 avro 文件中的一个数据点的结果。我需要的数据在'Body'里面。

我去:

x=my_dict.get("Body)

结果是:

b'{"id": "MicroSCADA OPC DA.S_M.APL.1.P.P_R_P.1", "ts": "2020-07-10T13:17:24.654000", "value": 1.1293551921844482, "status_code": 0}'

我想将数据分类成一个数据框,其中包含“id”、“ts”、“value”和“status code”。我该怎么做?

我也尝试过 pandavro,但字节仍将我需要的数据“锁定”在一起。我已经尝试将字节转换为字符串,但是键和它的值不再自然地属于一起了。

如何以最好的方式解决这个问题?

【问题讨论】:

    标签: python-3.x pandas dictionary byte avro


    【解决方案1】:

    将字节字符串转换为字符串,对其求值并将其转换为dataFrame:

    dic = {'SequenceNumber': 2654504175, 'Offset': '67826126730624', 'EnqueuedTimeUtc': '7/10/2020 1:18:00 PM', 'SystemProperties': {}, 'Properties': {}, 'Body': b'{"id": "MicroSCADA OPC DA.S_M.APL.1.P.P_R_P.1", "ts": "2020-07-10T13:17:24.654000", "value": 1.1293551921844482, "status_code": 0}'}
    
    d = eval(dic["Body"].decode("utf-8"))
    
    df = pd.DataFrame([list(d.values())],columns = list(d.keys()))
    
    df
    

    输出:

        id                                      ts                          value    status_code
    0   MicroSCADA OPC DA.S_M.APL.1.P.P_R_P.1   2020-07-10T13:17:24.654000  1.129355    0
    

    【讨论】:

    • 谢谢你,这行得通!现在我的问题是 append 给我带来了数据类型的麻烦。
    • 那么请投票或将其作为解决方案。追加是什么意思?添加更多字典?我建议将它们附加到 d 作为列表列表,然后创建 dataFrame。
    • 我循环遍历一个 avro 文件,返回许多如上所述的字典。我想从所有字典中挑选出“正文”部分并放入一个数据框中,其中的列等于您的结果。因此,您的解决方案有效,但现在我无法追加。列表解决方案可能会更好地节省处理,但如何做到这一点?
    • 继续将您的词典添加到列表d_list,然后就这样做df = pd.DataFrame(d_list)
    • 我在这里有点不知所措,但这真的很有帮助。 d_list.append(d) 在我的 for 循环中,然后 df=pd.DataFrame(d_list) 完美!非常感谢!
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2017-04-30
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多