【问题标题】:Iterate append json and save as dataframe in Python迭代追加json并在Python中保存为数据框
【发布时间】:2020-05-08 10:31:54
【问题描述】:

我想从链接here 中迭代和提取表,然后将它们连接或附加以保存为数据框。

我使用了循环迭代表,但我不确定如何将所有 jsondataframe 附加到一个表中?

有人可以帮忙吗?谢谢你。

from requests import post
import json
import pandas as pd
import numpy as np

headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
        "Referer": "http://zjj.sz.gov.cn/projreg/public/jgys/jgysList.jsp"}
dfs = []
#dfs = pd.DataFrame()

for page in range(0, 5):
    data = {"limit": 100, "offset": page * 100, "pageNumber": page + 1}
    json_arr = requests.post("http://zjj.sz.gov.cn/projreg/public/jgys/webService/getJgysLogList.json", headers = headers, data = data).text
    d = json.loads(json_arr)
    df = pd.read_json(json.dumps(d['rows']) , orient='list')

参考相关:Iterate and extract tables from web saving as excel file in Python

【问题讨论】:

    标签: json python-3.x pandas dataframe


    【解决方案1】:

    使用concat

    import requests
    import json
    import pandas as pd
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
        'Referer': 'http://zjj.sz.gov.cn/projreg/public/jgys/jgysList.jsp'
    }
    
    dfs = pd.DataFrame()
    
    for page in range(0, 5):
        data = {'limit': 100, 'offset': page * 100, 'pageNumber': page + 1}
        json_arr = requests.post(
            'http://zjj.sz.gov.cn/projreg/public/jgys/webService/getJgysLogList.json', 
            headers=headers, 
            data=data).text
        d = json.loads(json_arr)
        df = pd.read_json(json.dumps(d['rows']) , orient='list')
        dfs = pd.concat([df, dfs], sort=False)
    

    或者,

    import requests
    import json
    import pandas as pd
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
        'Referer': 'http://zjj.sz.gov.cn/projreg/public/jgys/jgysList.jsp'
    }
    
    dfs = []
    
    for page in range(0, 5):
        data = {'limit': 100, 'offset': page * 100, 'pageNumber': page + 1}
        json_arr = requests.post(
            'http://zjj.sz.gov.cn/projreg/public/jgys/webService/getJgysLogList.json', 
            headers=headers, 
            data=data).text
        d = json.loads(json_arr)
        dfs.append(pd.read_json(json.dumps(d['rows']) , orient='list'))
    
    df = pd.concat(dfs, sort=False)
    

    PS:第二块更受欢迎,你应该never call DataFrame.append or pd.concat inside a for-loop. It leads to quadratic copying.谢谢@parfait

    【讨论】:

    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多