Преобразование большой строки словарей в словарь - PullRequest
2 голосов
/ 03 октября 2019

У меня большой массив данных, состоящий из 144005 строк. Один из столбцов информационного кадра представляет собой строку словарей, например

'{"Step ID":"78495","Choice Number":"0","Campaign Run ID":"23199"},
    {"Step ID":"78495","Choice Number":"0","Campaign Run ID":"23199"},
    {"Step ID":"78495","Choice Number":"0","Campaign Run ID":"23199"}'

. Я хочу преобразовать эту строку в отдельные словари. Я использовал json.loads() для этой цели, однако мне приходилось перебирать эту строку словаря по одному, преобразовывать ее в словарь, используя json.loads(), затем преобразовывать это в новый фрейм данных и продолжать добавлять к этомупока я итерирую весь исходный фрейм данных.

Я хотел бы знать, существует ли более эффективный способ сделать это, так как для итерации по всему фрейму данных, состоящему из 144005 строк, требуется много времени.

Вот фрагмент того, что я делал:

d1 = df1['attributes'].values
d2 = df1['ID'].values
for i,j in zip(d1,d2):
    data = json.loads(i)
    temp = pd.DataFrame(data, index = [j])
    temp['ID'] = j
    df2 = df2.append(temp, sort=False)

Мой столбец «атрибуты» состоит из строки словаря в виде строки, а столбец «Ид» содержит ее соответствующуюId

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Сделал сам.

Я использовал map вместе с lambda функциями для эффективного применения json.loads() к каждой строке, затем я преобразовал эти данные в кадр данных и сохранил вывод.

Вот оно.

l1 = df1['attributes'].values
data = map(lambda x: json.loads(x), l1)
df2 = pd.DataFrame(data)
0 голосов
/ 03 октября 2019

Просто проверьте тип вашего столбца, используя type()

Если тип Series:

data['your column name'].apply(pd.Series)  

, тогда вы увидите все ключи как отдельный столбец в кадре данныхс их ключевыми значениями.

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