将字符串转换为数据帧可读
Converting string to dataframe-readable
我有很多这样的字符串:
"[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"
但由于我正在使用数据框,我需要将它们转换为 JSON(或者这就是格式的样子),以便我可以访问和展平数据。知道如何实现吗?
编辑:我意识到它不是 JSON,但我仍然不知道如何将其转换为字典等以便对其进行操作。
因为这可能是一项潜在的重复性任务。用它做一个函数可能是个好主意。
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)
您可以使用 ast.literal_eval
:
import ast
x = ast.literal_eval("[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]")
x[0]["name"] # evaluates to 'Romance'
来自文档:
Safely evaluate an expression node or a string containing a Python literal or container display. The string or node provided may only consist of the following Python literal structures: strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and None.
This can be used for safely evaluating strings containing Python values from untrusted sources without the need to parse the values oneself. It is not capable of evaluating arbitrarily complex expressions, for example involving operators or indexing.
看起来数据几乎在 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
我有很多这样的字符串:
"[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"
但由于我正在使用数据框,我需要将它们转换为 JSON(或者这就是格式的样子),以便我可以访问和展平数据。知道如何实现吗?
编辑:我意识到它不是 JSON,但我仍然不知道如何将其转换为字典等以便对其进行操作。
因为这可能是一项潜在的重复性任务。用它做一个函数可能是个好主意。
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)
您可以使用 ast.literal_eval
:
import ast
x = ast.literal_eval("[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]")
x[0]["name"] # evaluates to 'Romance'
来自文档:
Safely evaluate an expression node or a string containing a Python literal or container display. The string or node provided may only consist of the following Python literal structures: strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and None.
This can be used for safely evaluating strings containing Python values from untrusted sources without the need to parse the values oneself. It is not capable of evaluating arbitrarily complex expressions, for example involving operators or indexing.
看起来数据几乎在 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