разбить список словарей на несколько столбцов - PullRequest
0 голосов
/ 05 января 2020

У меня есть датафрейм с 30000 строками и 5 столбцами. один из этого столбца - список словарей и несколько слов Нана. Я хотел разбить этот столбец на 3 поля (место для ног в In-FLight Enternatinment) и хотел извлечь рейтинги

Ниже приведен пример для справки

d = {'col1': [[{'rating': 5, 'ratingLabel': 'Legroom'}, {'rating': 5, 'ratingLabel': 'Seat comfort'}, {'rating': 5, 'ratingLabel': 'In-flight Entertainment'}],'Nan']}
df = pd.DataFrame(data=d)
df

Ответы [ 2 ]

0 голосов
/ 05 января 2020

IIU C Это должно помочь:

df=df["col1"].apply(lambda x: pd.Series({el["ratingLabel"]: el["rating"] for el in x if isinstance(x, list)}))

Вывод:

   Legroom  Seat comfort  In-flight Entertainment
0      5.0           5.0                      5.0
1      NaN           NaN                      NaN
0 голосов
/ 05 января 2020

Вот возможное решение с использованием DataFrame.apply() и pd.Series и стратегии из Разделение словаря / списка внутри столбца Pandas на отдельные столбцы

import pandas as pd

d = {'col1': [[{'rating': 5, 'ratingLabel': 'Legroom'},
               {'rating': 5, 'ratingLabel': 'Seat comfort'},
               {'rating': 5, 'ratingLabel': 'In-flight Entertainment'}],
              [{'rating': 5, 'ratingLabel': 'Legroom'},
               {'rating': 5, 'ratingLabel': 'Seat comfort'},
               {'rating': 5, 'ratingLabel': 'In-flight Entertainment'}],
              'Nan']}
df = pd.DataFrame(data=d)
df

df_split = df['col1'].apply(pd.Series)
pd.concat([df,
           df_split[0].apply(pd.Series).rename(columns = {'rating':'legroom_rating',
                                                          'ratingLabel':'1'}),
           df_split[1].apply(pd.Series).rename(columns = {'rating':'seat_comfort_rating',
                                                         'ratingLabel':'2'}),
           df_split[2].apply(pd.Series).rename(columns = {'rating':'in_flight_entertainment_rating',
                                                         'ratingLabel':'3'})],
           axis = 1).drop(['col1','1','2','3',0],
                         axis = 1)

Создание следующий фрейм данных

Resulting DataFrame

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