首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas JSON嵌套

Pandas JSON嵌套
EN

Stack Overflow用户
提问于 2017-11-22 17:23:16
回答 0查看 74关注 0票数 1

目前,我在Pandas数据帧中有一个抓取的url表。这样做的目的是输出一个嵌套的json输出,通过使用groupby()和Lambda函数,我几乎得到了我想要的东西。我一直在学习这一点,所以可能不是很好的代码。

代码语言:javascript
运行
复制
{
"Field (Discovery)": "33/9-6 DELTA",
"NPDID information carrier": 44576,
"MonthlyProduction": [
  {
    "yyyymm": "2009.07.0",
    "Oil - saleable [mill Sm3]": 0.00025,
    "Gas - saleable [bill Sm3]": 0,
    "NGL - saleable [mill Sm3]": -0.00004,
    "Condensate - saleable [mill Sm3]": 0,
    "Oil equivalents - saleable [mill Sm3]": 0.00021,
    "Water - wellbores [mill Sm3]": 0.00051
  }

我正在寻找的是如何进一步分解JSON的嵌套部分,以便将列和"yyyymm“下的值嵌套如下:

代码语言:javascript
运行
复制
{
"Field (Discovery)": "33/9-6 DELTA",
"NPDID information carrier": 44576,
"MonthlyProduction": [
  {
    "yyyymm": "2009.07.0",
    "Oil – saleable: [
        {
         "Value":0.00025,
         "Unit":  mill Sm3,
        }
       ]
    "Gas - saleable":[
        {
        "Value": 0,
        "Unit":  bill Sm3,
        }
       ]
        "NGL - saleable ": -0.00004, etc
        "Condensate - saleable [mill Sm3]": 0, etc

代码:

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup
import json
from datetime import datetime as dt
import datetime
import pandas as pd

starttime = dt.now()

#Agent detail to prevent scraping bot detection
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
header = {'User-Agent' : user_agent }


# Webpage connection
html ="http://factpages.npd.no/ReportServer?/FactPages/TableView/
field_production_monthly&rs:Command=Render&rc:Toolbar=false&
rc:Parameters=f&Top100=False&IpAddress=108.171.128.174&CultureCode=en"

r=requests.get(html, headers=header)
c=r.content
soup=BeautifulSoup(c,"html.parser")

table = soup.find('table', attrs={'class':'a133'})

#Pandas dataframe 
df = pd.read_html(str(table), header=0)[0]
df['yyyymm'] = df['Year'].map(str)+df['Month'].map(str)
#df['NPDID information carrier'].astype(int)

df.info()

result = (df.groupby(["Field (Discovery)","NPDID information carrier"], 
as_index=False)
         .apply(lambda x: x[[ 'yyyymm','Oil - saleable [mill Sm3]','Gas - 
         saleable [bill Sm3]','NGL - saleable [mill Sm3]','Condensate - 
         saleable [mill Sm3]','Oil equivalents - saleable [mill Sm3]','Water 
         - wellbores [mill Sm3]' ]].to_dict('r'))
         .reset_index()
         .rename(columns={0: 'MonthlyProduction'})
         .to_json(orient='records'))

#print(result)
#print(json.dumps(json.loads(result), indent=2, sort_keys=True))

#Time
runtime = dt.now() - starttime
print(runtime)
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47430906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档