【问题标题】:Object to Dictionary Python对象到字典 Python
【发布时间】:2016-01-31 03:39:55
【问题描述】:

大家好,我有一个 pandas 列,其中包含字典对象,但不被识别为字典。

df.rowExample[0] = '[{"sold": 12, "breed": "golden"}, {"breed": "silver",  
                    "bought": 49}, {"breed": "golden", "bought": 29}]'

我试过 DataFrame.to_dict(df.column) 和 dict(df.column) 但键只是一个数字索引,值是整行。

谢谢!

【问题讨论】:

  • 这只是一个字符串。只要您的字符串仅包含字符串、数字、元组、列表、字典、布尔值和 None,您就可以使用 ast.literal_eval 转换字符串。

标签: python object dictionary pandas mapping


【解决方案1】:

您的数据是字典列表的字符串表示形式。您可以使用literal_eval 将其转换为列表对象:

import ast

obj = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49},   
       {"breed": "golden", "bought": 29}]'

obj = ast.literal_eval(obj)

或者使用json 模块更安全:

import json

obj = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49},   
       {"breed": "golden", "bought": 29}]'

obj = json.loads(obj)

【讨论】:

  • 问题不在于使用json.loads 是否比使用ast.literal_eval 更安全。很简单,如果你有json,你应该使用json.loads,如果你有由字符串、数字、元组、列表、字典、布尔值和None组成的Python文字,你应该使用ast.literal_eval
  • 谢谢 DeepSpace 和 Steven
【解决方案2】:

它好像没有字典……而是字典形式的字符串。

尝试一些类似的东西

>>> import ast
>>> ast.literal_eval(df.rowExample[0])

编辑:这看起来像它返回一个字典列表......所以

for dictionary in ast.literal_eval(df.rowExample[0]): abetterdict = dictionary

【讨论】:

  • 非常感谢 Busterdust!我使用 rowExample[0] 只显示一行,有没有办法为每一行执行此操作?我尝试了一个 for 循环,但它很慢
  • for row in arrayOfRows: ast.literal_eval(row) 它很可能会继续缓慢,您需要点击所有内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 2020-12-06
相关资源
最近更新 更多