Задать вопрос
@dlysenko1311

Как распарсить датафрейм в пандас, когда сзначеним одной колонки являются словарь?

У меня есть такой пандас датафрейм:
638f6f7411fb5268180343.png

Как распарсить поле Tuples и при этом не потерять поля Ordinal и Cardinality?
Как получить из этого датафрейма друго датафрейм без вложений в столбцах?

Вот откуда это у меня получилось (как пример):
data = [
        {
            "Ordinal": 0,
            "Cardinality": 1,
            "Hierarchies": [],
            "Tuples": [
                {
                    "Ordinal": 0,
                    "Members": []
                }
            ]
        },
        {
            "Ordinal": 1,
            "Cardinality": 4023,
            "Hierarchies": [
                {
                    "@odata.etag": "W/\"324214423423\"",
                    "Name": "Год"
                },
                {
                    "@odata.etag": "W/\"2314214134\"",
                    "Name": "Месяц"
                },
                {
                    "@odata.etag": "W/\"4273172132313214\"",
                    "Name": "Статья БДР"
                },
                {
                    "@odata.etag": "W/\"21343214213\"",
                    "Name": "Версия"
                },
                {
                    "@odata.etag": "W/\"3214213421\"",
                    "Name": "Контур"
                }
            ],
            "Tuples": [
                {
                    "Ordinal": 0,
                    "Members": [
                        {
                            "Name": "МСФО"
                        },
                        {
                            "Name": "Сегмент"
                        },
                        {
                            "Name": "Сегмент"
                        },
                        {
                            "Name": "ВСЕ"
                        },
                        {
                            "Name": "RUR"
                        },
                        {
                            "Name": "Сумма после Элиминации и Распределения"
                        }
                    ]
                }
            ]
        }
    ]


Здесь, есть еще один столбце Hierarchies, но он не обязательно должен быть в результируещей таблице (датфрейме)
  • Вопрос задан
  • 446 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
Maksim_64
@Maksim_64
Data Analyst
Поле Tuples имеет dtype, 'Object', что в pandas (малость упрощая) эквивалентно str. В pandas есть aкссесор str для того что бы применять по элементно функции строк python, регулярные выражения и т.д. синтаксис элементарный.
df['Tuples'].str.some_method()
распарсите строку и все. Если вы ищете готовое решение, то это во фриланс. Вы должны предоставить код в котором вы пытаетесь решить проблему, но не получается. Направление для начала написания такого кода я вам подсказал.
Ответ написан
Комментировать
ma4akk
@ma4akk
Чтобы проанализировать поле Tuples в фрейме данных pandas, вы можете использовать метод DataFrame.apply для применения пользовательской функции к каждой строке фрейма данных. Эта пользовательская функция может извлекать поля Ordinal и Cardinality из словаря в столбце Кортежи и возвращать новый кортеж или список, содержащий эти значения.

Например:

def extract_ordinal_and_cardinality(row):
      tuples_dict = row['Tuples']
      return (tuples_dict['Ordinal'], tuples_dict['Cardinality'])


df['Tuples'] = df.apply(extract_ordinal_and_cardinality, axis=1)
Это создаст новый столбец в фрейме данных под названием Tuples, который содержит извлеченные Ordinal и Cardinality из словарей в исходном столбце Tuples.

Чтобы создать новый фрейм данных без столбцов Hierarchies и Tuples, вы можете использовать метод DataFrame.drop для удаления этих столбцов из исходного фрейма данных.

Например:

new_df = df.drop(columns=['Hierarchies', 'Tuples'])
Это создаст новый фрейм данных с именем new_df, который содержит все столбцы из исходного фрейма данных, за исключением столбцов Hierarchies и Tuples.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы