сведение столбца json к нескольким столбцам в кадре данных pandas - PullRequest
0 голосов
/ 16 июня 2020

У меня есть pandas фрейм данных, который выглядит в следующем формате

   email          name    permissions
  abc@gmail.com   abc    {'system_role': {'title': 'uadmin', 'mask': 64.0}, 'account_roles': [{'role': {'title': 'user', 'mask': 4}}], 'labs_access': True}

Я хочу, чтобы разрешения на разнесение игнорировали system_role и labs_access и имели только столбец заголовка из account_roles dict, поскольку остальные данные бесполезны.

ожидаемый фрейм данных

   email          name    permissions_role_tile 
  abc@gmail.com   abc           'user'

Я пробовал следующий код, чтобы сгладить фрейм данных и отбросить столбцы, но он выдает ошибку TypeError: 'float' object is not iterable. Кроме того, другие сообщения, но ни один из них не работает.

df1 = (pd.concat({i: json_normalize(x) for i, x in df.pop('permissions').items()})
         .reset_index(level=1, drop=True)
         .join(df)
         .reset_index(drop=True))

Очень признателен, если я могу получить помощь.

1 Ответ

1 голос
/ 16 июня 2020

Вы можете проиндексировать столбец json с помощью метода str:

data = {"email":"abc@gmail.com", "name":"abc","permissions":[{'system_role': {'title': 'uadmin', 'mask': 64.0}, 'account_roles': [{'role': {'title': 'user', 'mask': 4}}], 'labs_access': True}]}
df = pd.DataFrame(data)

df['permissions_role_title'] = df.permissions.str['account_roles'].str[0].str['role'].str['title']

       email       name          permissions             permissions_role_title
0   abc@gmail.com   abc {'system_role': {'title': 'uadmin', 'mask': 64...   user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...