【问题标题】:url of json file in reading pandas didn't work读取熊猫的json文件的url不起作用
【发布时间】:2020-10-23 06:32:55
【问题描述】:

我想在 pandas 中使用 URL 读取 json 文件,但它引发了一些错误,我认为这是我给出的相关路径,请查看代码和 url。我在堆栈溢出时没有找到它,所以问了它。这个可能是重复的,但请帮帮我。

data_df = pd.read_json('https://github.com/jackiekazil/data-wrangling/blob/master/data/chp3/data-text.json')

json_url 如下:

https://github.com/jackiekazil/data-wrangling/blob/master/data/chp3/data-text.json

错误信息:

ValueError: Expected object or value

【问题讨论】:

    标签: json pandas json-normalize


    【解决方案1】:
    • 您将无法使用 pandas 直接读取文件
    • 您需要下载它
    • 顺便说一下,下面的函数可以用于从正确的 URL 下载任何文件。
      • 该函数需要 URL 和要保存到的目录。
    import request
    from pathlib import Path
    import pandas as pd
    
    def create_dir_save_file(dir_path: Path, url: str):
        """
        Check if the path exists and create it if it does not.
        Check if the file exists and download it if it does not.
        """
        if not dir_path.parents[0].exists():  # if directory doesn't exist
            dir_path.parents[0].mkdir(parents=True)  # create directory
            print(f'Directory Created: {dir_path.parents[0]}')
        else:
            print('Directory Exists')
            
        if not dir_path.exists():  # if file doesn't exist
            r = requests.get(url, allow_redirects=True)  # get file
            open(dir_path, 'wb').write(r.content)  # write file
            print(f'File Created: {dir_path.name}')
        else:
            print('File Exists')
            
    
    data_dir = Path.cwd()  # current working dir or use Path('e:/some_path') to specify a location
    url = 'https://raw.githubusercontent.com/jackiekazil/data-wrangling/master/data/chp3/data-text.json'
    file_name = url.split('/')[-1]
    data_path = data_dir / file_name  # local path to data once downloaded
    create_dir_save_file(data_path, url)  # call function to download file
    
    df = pd.json_normalize(data_path)  create dataframe
    
    # display(df.head())
    
                               Indicator PUBLISH STATES  Year             WHO region World Bank income group               Country         Sex  Display Value  Numeric Low High Comments
    0   Life expectancy at birth (years)      Published  1990                 Europe             High-income               Andorra  Both sexes             77     77.0                  
    1   Life expectancy at birth (years)      Published  2000                 Europe             High-income               Andorra  Both sexes             80     80.0                  
    2  Life expectancy at age 60 (years)      Published  2012                 Europe             High-income               Andorra      Female             28     28.0                  
    3  Life expectancy at age 60 (years)      Published  2000                 Europe             High-income               Andorra  Both sexes             23     23.0                  
    4   Life expectancy at birth (years)      Published  2012  Eastern Mediterranean             High-income  United Arab Emirates      Female             78     78.0                  
    

    【讨论】:

      【解决方案2】:

      你想要这个网址:https://raw.githubusercontent.com/jackiekazil/data-wrangling/master/data/chp3/data-text.json

      raw.githubusercontent.com 提供在 Github 存储库中找到的未处理文件。您在问题中发布的链接不会为您提供您感兴趣的原始 JSON 文件;相反,它会加载网页本身。 this answer.

      也解决了这个问题

      使用上面的 URL,你的代码对我来说很好。

      【讨论】:

      猜你喜欢
      • 2019-03-31
      • 2021-08-16
      • 2016-12-26
      • 2020-04-17
      • 2020-01-03
      • 2018-03-04
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多