Как преобразовать вложенный ниже json в столбцы фрейма данных pandas. Каждый узел в другой столбец

#json #python-3.x #pandas #dataframe

#json #python-3.x #pandas #фрейм данных

Вопрос:

У меня есть образец json ниже, я хочу, чтобы он был преобразован в фрейм данных pandas. Это данные instagram. Я пробовал несколько подходов, но я не получаю все узлы в виде столбцов pandas.

 [
{
    "dimensions": {
        "height": 734,
        "width": 640
    },
    "display_url": "someurl1",
    "edge_liked_by": {
        "count": 3797
    },
    "edge_media_preview_like": {
        "count": 3797
    },
    "edge_media_to_caption": {
        "edges": [
            {
                "node": {
                    "text": "some text1"
                }
            }
        ]
    },
    "edge_media_to_comment": {
        "count": 52
    },
    "id": "183471293",
    "is_video": true,
    "location": null,
    "owner": {
        "id": "191968"
    },
    "shortcode": "Bl2Nb",
    "tags": [
        "tag1",
        "tag2"
    ],
    "taken_at_timestamp": 153293,
    "thumbnail_resources": [
        {
            "config_height": 150,
            "config_width": 150,
            "src": "3382263118984904704_n.jpg"
        },
        {
            "config_height": 240,
            "config_width": 240,
            "src": "904704_n.jpg"
        },
        {
            "config_height": 320,
            "config_width": 320,
            "src": "904704_n.jpg"
        },
        {
            "config_height": 480,
            "config_width": 480,
            "src": "904704_n.jpg"
        },
        {
            "config_height": 640,
            "config_width": 640,
            "src": "904704_n.jpg"
        }
    ],
    "thumbnail_src": "904704_n.jpg",
    "urls": [
        "08864_n.mp4"
    ],
    "video_view_count": 0
}
]
 

Я хочу, чтобы он был преобразован в столбцы фрейма данных pandas. например, мне нужен «edge_media_to_caption> края> узел> текст» в качестве одного столбца в моем фрейме данных.
Пожалуйста, дайте мне код или логику для этого в python 3.x.

Я попробовал следующее,

 data = pd.read_json('file.json')

dimensions  display_url     edge_liked_by   edge_media_preview_like     edge_media_to_caption   edge_media_to_comment   id  is_video    location    owner   shortcode   tags    taken_at_timestamp  thumbnail_resources     thumbnail_src   urls    video_view_count
0   {'height': 734, 'width': 640}   someurl1    {'count': 3797}     {'count': 3797}     {'edges': [{'node': {'text': 'some text1'}}]}   {'count': 52}   183471293   True    NaN     {'id': '191968'}    Bl2Nb   [tag1, tag2]    153293  [{'config_height': 150, 'config_width': 150, '...   904704_n.jpg    [08864_n.mp4]   0
 

введите описание изображения здесь

df1 = pd.DataFrame(pd.json_normalize(data.edge_media_to_caption))
df1
введите описание изображения здесь

Комментарии:

1. Пожалуйста, укажите любой код, который вы пробовали, чтобы мы могли исправить вас или указать вам другое направление. Хотя я мог бы ответить на этот вопрос, цель этого сайта — помочь застрявшим программистам, а не написать 100% решение для вас.

2. Привет @DannyVarod: обновил то, что я сделал.

3. Хорошее начало, некоторые столбцы представляют собой простые значения, а некоторые — json. Вы можете переназначить определенные столбцы, например data['edge_liked_by'] = data['edge_liked_by'].apply(lambda v: json.reads(v)['count'])