Распаковка объекта JSON из столбца панд в новые столбцы

У меня есть объект JSON, который содержит несколько других объектов JSON внутри. Общая структура (взята из документации Apple Search Ads API):

{
    "id": number,
    "orgId": number,
    "name": string,
    "budgetAmount": {Amount Object},
    "dailyBudgetAmount": {Amount Object},
    "adamId": number,
    "negativeKeywords": [list of NegativeKeyword Objects], # notice list of objects
    "paymentModel": enum,
    "locInvoiceDetails": {LocInvoiceDetails Object},
    "adGroups": [list of AdGroup Objects], # notice list of objects
    "budgetOrders": [list of strings],
    "startTime": UTC-timestamp,
    "endTime": UTC-timestamp,
    "deleted": bool,
    "status": enum,
    "servingStatus": enum,
    "servingStateReasons": [list of strings],
    "storefront": ISO-ALPHA2-country-code,
    "modificationTime": UTC-timestamp
}

Объект Adgroup выглядит так:

{
  "id": number,
  "campaignId": number,
  "name": string,
  “defaultCPCBid”: {Amount Object},
  "cpaGoal": {Amount Object},
  "startTime": UTC-timestamp,
  "endTime": UTC-timestamp,
  "keywords": [list of TargetedKeyword Objects], # notice list of objects
  "negativeKeywords": [list of NegativeKeyword Objects], # notice list of objects
  "automatedKeywordsOptIn": boolean,
  "targetingDimensions": [list of TargetingDimensions Objects], # notice list of objects
  "deleted": boolean,
  "status": enum,
  "servingStatus": enum,
  "servingStateReasons": [list of strings],
  "modificationTime": UTC-timestamp
}

Объект adgroup также имеет список объектов ключевых слов, которые находятся по ссылке выше.

Используя это руководство, мне удалось создать 3 кадра данных: один для кампаний, один для групп объявлений и один для ключевых слов.

Например, код, который я использовал для групп объявлений, был

d = r.json()
# campaign object is the value to a key, 'data'
adgroups_df = json_normalize(data=d['data'], record_path=['adGroups'])
adgroups_df.head(10)

Тем не менее, принимая defaultCpcBid Например, поле возвращает один столбец для него, где пример строки выглядит

{'amount': '0.2', 'currency': 'GBP'}

То, что я хочу, это иметь два новых цвета, один defaultCpcBid.amount и другой defaultCpcBid.currency вместо того, чтобы весь объект в одном ряду.

Странно, он делает это для объекта кампании (budgetAmount поле распаковывается в два столбца budgetAmount.amount и другой budgetAmount.currency)

Я использую тот же код, чтобы получить данные кампании

d = r.json()
campaigns_df = json_normalize(d['data'])
campaigns_df.head(10)

Какой лучший способ сделать это?

0 ответов

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