列表中的嵌套字典到数据框 python

时间:2021-03-13 13:30:34

标签: python-3.x dataframe json-normalize

有一个来自 api 的 json 输入:

{
  "api_info": {
    "status": "healthy"
  },
  "items": [
    {
      "timestamp": "time", 
      "stock_data": [
        {
          "ticker": "string",
          "industry": "string",
          "Description": "string"
        }
      ]
     "ISIN":xxx,
     "update_datetime": "time"
    }
  ]
}

已经开始运行

apiRawData = requests.get(url).json()['items']

然后运行 ​​json_normalize 方法:

apiExtractedData = pd.json_normalize(apiRawData,'stock_data',errors='ignore')

这是初始输出,其中 stock_data 仍包含在列表中。 stock_data ISIN update_datetime 0 [{'description': 'zzz', 'industry': 'C', 'ticker...xxx 时间

<头>
stock_data ISIN update_datetime
0 [{'description': 'zzz', 'industry': 'C', 'ticker...] 123 时间

我想要实现的是一个显示标题和相应行的数据框:

<头>
描述 行业 ticker ISIN update_datetime
0 'zzz' 'C' xxx 123 时间

如果已经回答了现有问题,请指导我:) 欢呼。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用以下代码简单地将现有数据框转换为您期望的数据框:

apiExtractedData['description'] = apiExtractedData['stock_data'].apply(lambda x: x[0]['description'])
apiExtractedData['industry'] = apiExtractedData['stock_data'].apply(lambda x: x[0]['industry'])
apiExtractedData['ticker'] = apiExtractedData['stock_data'].apply(lambda x: x[0]['ticker'])

然后删除您的 stock_data 列:

apiExtractedData = apiExtractedData.drop(['stock_data'], axis = 1)