字节/节至数据帧

时间:2019-03-28 12:23:17

标签: python pandas

将数据转换为DataFrame的最佳方法是什么?

    data = b'{"word": "Gondwana", "date": "2019-03-27 13:07:12.404732"}'
           b'{"word": "alalus", "date": "2019-03-27 13:07:12.909517"}'
           b'{"word": "Balto-Slavonic", "date": "2019-03-27 13:07:14.911308"}'
           b'{"word": "peculatation", "date": "2019-03-27 13:07:15.421915"}'

我尝试过了。似乎没有用。

d = pd.DataFrame(dict(data))

2 个答案:

答案 0 :(得分:2)

将第一个decode值转换为utf-8,然后通过ast.literal_evaljson.loads转换为列表理解字典:

data = [b'{"word": "Gondwana", "date": "2019-03-27 13:07:12.404732"}',
        b'{"word": "alalus", "date": "2019-03-27 13:07:12.909517"}',
        b'{"word": "Balto-Slavonic", "date": "2019-03-27 13:07:14.911308"}',
        b'{"word": "peculatation", "date": "2019-03-27 13:07:15.421915"}']

import ast   

df = pd.DataFrame([ast.literal_eval(x.decode("utf-8")) for x in data])
print (df)
                         date            word
0  2019-03-27 13:07:12.404732        Gondwana
1  2019-03-27 13:07:12.909517          alalus
2  2019-03-27 13:07:14.911308  Balto-Slavonic
3  2019-03-27 13:07:15.421915    peculatation

替代解决方案,在大数据中应更快:

import json

df = pd.DataFrame([json.loads(x.decode("utf-8")) for x in data])

答案 1 :(得分:0)

您不能只用像python dict这样格式化的字节串来构造字典。您需要以某种方式解析它。

如果您知道您的字节字符串将始终是有效的字典。您可以尝试

dict(eval(b'{"word": "soning", "date": "2019-03-27 13:07:13.409948"}'))

,你应该没事。如果您不知道字节字符串中会有什么,我建议您不要使用eval。

这里的另一个答案建议使用ast.literal_evaleval更安全,因为literal_eval不能用于评估复杂表达式。 参见:https://docs.python.org/3.5/library/ast.html#ast.literal_eval

您可以从ast模块中获取literal_eval


from ast import literal_eval
literal_eval(b'{"word": "soning", "date": "2019-03-27 13:07:13.409948"}')