Как создать DataFrame с вложенным массивом

На самом деле я получаю сгенерированный Pandas JSON, который я загружаю для создания Dataframe. В его Dataframe есть несколько вложенных столбцов массива, которые мне нужно перебрать;

Простая загрузка pandas.read_json() дает столбец с массивами, и я не могу работать с ним. Ниже код:

import pandas

dataframe = pandas.read_json('/Users/***/Downloads/df_teste.json', orient='table')
print(dataframe)

Возвращает мне Dataframe, как показано выше:

Студенческий билет название создан в языки 1 Фу 2019-01-03 14:30:32.146000+00:00 [{'language_id': 1, 'name': 'English', 'optin_... 2 Бар 2019-01-03 14:30:32.146000+00:00 [{'language_id': 1, 'name': 'English', 'optin_...

И мой вопрос: как я могу читать, как этот?

Студенческий билет language_id Название языка optin_at 1 1 Английский 2019-01-03T14:30:32.148Z 2 1 Английский 2021-05-30T00:33:02.915Z 2 2 португальский 2022-03-07T07:42:07.082Z

В целях тестирования я загружаю с помощью приведенного ниже JSON:

{
  "schema": {
    "fields": [
      { "name": "student_id", "type": "string" },
      { "name": "name", "type": "string" },
      { "name": "created_at", "type": "datetime", "tz": "UTC" },
      { "name": "languages", "type": "string" }
    ],
    "pandas_version": "0.20.0"
  },
  "data": [
    {
      "student_id": "1",
      "name": "Foo",
      "created_at": "2019-01-03T14:30:32.146Z",
      "languages": [
        {
          "language_id": 1,
          "name": "English",
          "optin_at": "2019-01-03T14:30:32.148Z"
        }
      ]
    },
    {
      "student_id": "2",
      "name": "Bar",
      "created_at": "2019-01-03T14:30:32.146Z",
      "languages": [
        {
          "language_id": 1,
          "name": "English",
          "optin_at": "2021-05-30T00:33:02.915Z"
        },
        {
          "language_id": 2,
          "name": "Portuguese",
          "optin_at": "2022-03-07T07:42:07.082Z"
        }
      ]
    }
  ]
}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать json_normalize для получения ожидаемого вывода. Здесь я создал ожидаемый вывод с использованием json_normalize из вашего ввода json.

import pandas as pd
from pandas import json_normalize

data = {
  "schema": {
    "fields": [
      { "name": "student_id", "type": "string" },
      { "name": "name", "type": "string" },
      { "name": "created_at", "type": "datetime", "tz": "UTC" },
      { "name": "languages", "type": "string" }
    ],
    "pandas_version": "0.20.0"
  },
  "data": [
    {
      "student_id": "1",
      "name": "Foo",
      "created_at": "2019-01-03T14:30:32.146Z",
      "languages": [
        {
          "language_id": 1,
          "name": "English",
          "optin_at": "2019-01-03T14:30:32.148Z"
        }
      ]
    },
    {
      "student_id": "2",
      "name": "Bar",
      "created_at": "2019-01-03T14:30:32.146Z",
      "languages": [
        {
          "language_id": 1,
          "name": "English",
          "optin_at": "2021-05-30T00:33:02.915Z"
        },
        {
          "language_id": 2,
          "name": "Portuguese",
          "optin_at": "2022-03-07T07:42:07.082Z"
        }
      ]
    }
  ]
}


student_detail = ['student_id']
df = pd.json_normalize(data['data'], 'languages', student_detail)
print(df)

Распечатав df, вы можете получить желаемый результат. Вот результат. Ps столбцы неупорядочены, вы можете заказать их. Спасибо

language_id        name                  optin_at student_id
0            1     English  2019-01-03T14:30:32.148Z          1
1            1     English  2021-05-30T00:33:02.915Z          2
2            2  Portuguese  2022-03-07T07:42:07.082Z          2

Надеюсь, это поможет, если нет, пожалуйста, дайте знать. Спасибо,

PS: Я не уверен, что это то, чего вы ожидаете. Вы можете просто использовать pd.to_datetime в столбце optin_at. Я предоставил код ниже,

df['optin_at'] = pd.to_datetime(df['optin_at'])
print(df['optin_at'])

Если вы добавите эти две строки, он напечатает optin_at в формате даты и времени. Вывод

0   2019-01-03 14:30:32.148000+00:00
1   2021-05-30 00:33:02.915000+00:00
2   2022-03-07 07:42:07.082000+00:00

Надеюсь, это поможет, дайте знать, если это не так. Спасибо

Как я могу прочитать столбец optin_at как объект даты и времени?

Hudson Medeiros 06.12.2022 11:19

Другие вопросы по теме