Отделение данных от строки, заполненной несколькими типами данных - PullRequest
1 голос
/ 29 мая 2020

Я хочу превратить эту строку в список словарей в ней:

”[{‘id’: ‘x’, ‘name’: ‘y’}, {‘id’: ‘p’, ‘name’: ‘q’}]”

У меня есть несколько столбцов в кадре данных pandas, состоящем из строк, похожих на этот. Некоторые из них только ”[]” или ”[{‘id’: ‘x’, ‘name’: ‘y’}]”, а другие содержат много строковых словарей.

Я пробовал

import json
z = ”[{‘id’: ‘x’, ‘name’: ‘y’}, {‘id’: ‘p’, ‘name’: ‘q’}]”
list(json.loads(z[1:-1]))

И это отлично работает, когда есть только один строковый словарь (”[{‘id’: ‘x’, ‘name’: ‘y’}]”) но поскольку словари имеют общие ключи, их нельзя просто jsonified.

Как только это будет сделано, я извлечу значение из name каждого и создам список из них.

ОТВЕТИЛ Спасибо @ Tenacious B

Чтобы превратить строку в список dicts:

import json
z = ”[{‘id’: ‘x’, ‘name’: ‘y’}, {‘id’: ‘p’, ‘name’: ‘q’}]”
data = json.loads(z.replace("'", ""))]) # this will be a list of dicts

Вывод:

[{'id': 'x', 'name': 'y'}, {'id': 'p', 'name': 'q'}]

И для применения к pandas кадру данных, имеющему столбец с записями, как указано выше, с получением только значения из желаемого ключа:

import json
df['col'] = df['col'].apply(lambda x: [i['name'] for i in json.loads(x.replace("'", ""))])

Ответы [ 2 ]

1 голос
/ 29 мая 2020

У вас могут быть одни и те же ключи в разных объектах dicts / json, также для loads() вам нужно заменить ' на ":

import json
z = "[{'id': 'x', 'name': 'y'}, {'id': 'p', 'name': 'q'}]"
data = json.loads(z.replace("'", '"')) # this will be a list of dicts
print(data)

Вывод:

[{'id': 'x', 'name': 'y'}, {'id': 'p', 'name': 'q'}]
1 голос
/ 29 мая 2020

После того, как я искал, как преобразовать список строк в объект списка, я наткнулся на следующее: Как преобразовать строковое представление списка в список?

с помощью ast.literal_eval можно решить ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...