将数据转换为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))
答案 0 :(得分:2)
将第一个decode
值转换为utf-8
,然后通过ast.literal_eval
或json.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_eval
比eval
更安全,因为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"}')