Разбить столбцы данных, содержащие словари - PullRequest
0 голосов
/ 13 декабря 2018

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

Это мой первый пост, и я исследовал свою проблему, но не смог найти решение.

На самом деле, у меня есть DataFrame, подобныйthis (столбец SecurityInfo содержит словари, которые я подробно опишу ниже)

  Rent_ID     UserId  Car_Id  Rent_Date     SecurityInfo
    0           1        2    2018/05/09     dict_1
    1           2        4    2018/05/10     dict_2
    2           3        6    2018/05/11     dict_3

Ниже вы можете увидеть, как выглядят словари.Один словарь на ячейку.

{
    "car_consumption": 99,
    "car_route_option": "None",
    "safetyEvents": [{
                  "latitude": 99.140763200350641,
                  "longitude": -9.6871865486956645,
                  "time": 1121,
                  "type": 3
             }, {
                  "latitude": 99.115982330953294,
                  "longitude": -9.5833240979286927,
                  "time": 1710,
                  "type": 1
             }, {
                  "latitude": 99.115982330953294,
                  "longitude": -9.5833240979286927,
                  "time": 1710,
                  "type": 2
    },
    "pollutant": {
        "trip": 8.0129999999999999,
        "nox": 44.960000000000001,
        "co": 28.300000000000001,
        "global": 8.7065000000000001
    },
    "ecoDriving": {
        "scoreAccel": 2.5,
        "score": 9.4000000000000004,
        "scoreMain": 3.1000000000000001
    }
}

Как видите, ключ SafetyEvent является вложенным ключом, который также содержит список словаря

Я хотел бы получить такой вывод

      Rent_ID     UserId  Car_Id  Rent_Date   Car_Consumption  car_route_option         SafetyEvent       trip   nox    co     global    scoreAccel    score    scoreMain
        0           1        2    2018/05/09      99                None           list1_of_SafetyEvent   
        1           2        4    2018/05/10      95                Good           list2_of_SafetyEvent 
        2           3        6    2018/05/11      96                 Bad           list3_of_SafetyEvent

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

def unpack(df, column, fillna=None):


    ret = None  # Intitlisation retour
    if fillna is None:   # Si 
        ret = pd.concat([df, pd.DataFrame((d for idx, d in df[column].iteritems()))], axis=1)
        del ret[column]
    else:
        ret = pd.concat([df, pd.DataFrame((d for idx, d in df[column].iteritems())).fillna(fillna)], axis=1)
        del ret[column]
    return ret

Я также пробовал этоно это не сработало,

df_SafetyEvent = pd.DataFrame(df['SecurityInfo'].values.tolist(), index=df.index)

кажется, что мои словари не обнаружены как словари, но я проверил тип, они на самом деле.

Спасибо за то, кто может помочь, если мойсообщение не соответствует, дайте мне знать, я исправлю его.

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