【问题标题】:Converting string to dataframe-readable将字符串转换为数据帧可读
【发布时间】:2020-07-29 01:43:25
【问题描述】:

我有很多这样的字符串:

"[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"

但由于我使用的是数据框,因此我需要将它们转换为 JSON(或者这就是格式的样子),以便我可以访问和展平数据。关于如何实现这一点的任何想法?

编辑:我意识到它不是 JSON,但我仍然不知道如何将其转换为字典以便对其进行操作。

【问题讨论】:

标签: python json python-3.x python-3.7


【解决方案1】:

你可以使用ast.literal_eval:

import ast
x = ast.literal_eval("[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]")
x[0]["name"]  # evaluates to 'Romance'

来自文档:

安全地评估包含 Python 文字或容器显示的表达式节点或字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔值和无。

这可用于安全地评估包含来自不受信任来源的 Python 值的字符串,而无需自己解析这些值。它不能评估任意复杂的表达式,例如涉及运算符或索引。

【讨论】:

  • 是的!谢谢!
【解决方案2】:

看起来数据几乎是 JSON,但我认为双引号应该围绕字典键,而单引号应该围绕整个对象。您可以通过运行来解决此问题:

data_string = "[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"
json_string = data_string.replace("'", '''"''')

你现在有了一个 JSON 字符串!

如果您需要将字符串转换为 python 结构,您可以执行以下操作:

import json

data = json.loads(json_string)
print(data[0]['id']) # 10749

【讨论】:

  • 这在这种情况下有效,但是单引号以外的东西可能会使字符串成为非 JSON。例如,序列中最后一项的末尾可能有逗号,这会使 JSON 无效。
  • 是的,你是对的。我以前从未使用过 ast 模块。
  • 字符串中也可以有单引号,这也会将它们转换为双引号。
【解决方案3】:

因为这可能是一项潜在的重复性任务。用它做一个函数可能是个好主意。

import json  # Import json module to work with json data
import ast


data = "[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"


def clean_data_for_json_loads(input_data):
    """Prepare data from untrusted sources for json formatting. 
    Output JSON object as string """
    evaluated_data = ast.literal_eval(input_data)
    json_object_as_string = json.dumps(evaluated_data)
    return json_object_as_string

evaluated_data = clean_data_for_json_loads(data)


# Load json data from a string, the (s) in loads stands for string. This helps to remember the difference to json.load
json_data = json.loads(evaluated_data)
print(json_data)

【讨论】:

  • 这行不通,数据不是 JSON 格式。没看到单引号应该是双引号吗?
  • 感谢您的反馈。我留下了一些。现在更新了。
猜你喜欢
  • 2014-06-07
  • 2017-07-14
  • 2023-01-21
  • 1970-01-01
  • 2020-06-10
  • 2020-10-02
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多