웹사이트 검색

정렬되지 않은 API 끝점에서 pandas DataFrame을 얻는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

Excel 스프레드시트 또는 데이터 분석과 유사합니다.

Python을 사용하여 CSV, Excel 또는 API 끝점의 데이터를 pandas DataFrame으로 변환한 다음 얻은 DataFrame에서 작업할 수 있습니다. Excel 및 CSV 파일 변환은 간단한 경향이 있지만 API 끝점은 다를 수 있으므로 해당 정보에서 DataFrames를 만드는 것은 어려울 수 있습니다.

일부 API 엔드포인트는 독자에게 친숙한 사전 형식으로 존재하며, 여기서 키는 열 이름을 나타내고 값은 이러한 열에 속하는 요소를 나타냅니다. 그러나 일부 API 끝점은 명확한 컨텍스트에서 열 이름과 해당 값을 나타내지 않으며 정렬되지 않은 API 끝점을 DataFrame으로 변환하는 것이 어려울 수 있습니다.

이 자습서에서는 정렬되지 않은 엔드포인트에서 데이터를 가져와 pandas DataFrame에 적합한 형식으로 제공합니다. 먼저, 정렬된 API 데이터를 DataFrame으로 변환하기 위한 일부 컨텍스트를 제공하기 위해 일부 기존 API 형식에서 데이터를 추출합니다. 그런 다음 정렬되지 않은 API 엔드포인트로 작업합니다. 열 이름과 해당 요소를 추출하여 사전을 만듭니다. 마지막으로 이 사전을 데이터 분석에 사용할 수 있는 pandas DataFrame으로 전달합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 컴퓨터에 설치된 Python 3, pipPython venv 모듈. Ubuntu 및 기타 Linux 배포판의 경우 macOS에서 Python 3를 설치하고 로컬 프로그래밍 환경을 설정하는 방법에 대한 자습서의 1단계와 2단계를 따르십시오.
  • Jupyter 설치를 위한 공식 문서
  • Jupyter Notebook에 액세스하는 데 사용할 최신 웹 브라우저
  • 사전과 같은 Python의 기초에 익숙함.
  • 데이터 조작 및 분석을 위한 Python pandas 모듈 경험.

1단계 - Jupyter 노트북 환경 준비

이 자습서에서는 Jupyter Notebook을 사용하여 데이터 작업을 합니다. Jupyter Notebook은 작은 코드 스니펫을 작성하고 실행하고 결과를 반환할 수 있으므로 반복 코딩에 유용합니다.

Jupyter 노트북에서 이 자습서를 따르려면 새 노트북을 열고 이 단계에서 수행할 필수 종속 항목을 설치해야 합니다.

전제 조건에서 서버에 Jupyter Notebook 환경을 설정합니다. 서버에 로그인한 후 가상 환경을 활성화합니다.

  1. source ~/environments/my_env/bin/activate

그런 다음 Jupyter Notebook 애플리케이션을 실행하여 애플리케이션을 시작합니다.

  1. jupyter notebook

참고: 원격 서버에서 자습서를 따르는 경우 포트 전달을 사용하여 로컬 컴퓨터의 브라우저에서 Jupyter 노트북에 액세스할 수 있습니다.

새 터미널을 열고 다음 명령을 입력합니다.

  1. ssh -L 8888:localhost:8888 your_non_root_user@your_server_ip

서버에 연결되면 출력에서 제공하는 링크로 이동하여 Jupyter 노트북에 액세스합니다. 이 튜토리얼의 나머지 부분에서는 이 터미널을 열어 두십시오.

실행하고 연결하면 브라우저 기반 사용자 인터페이스에 액세스하게 됩니다. 새로 만들기 드롭다운 메뉴에서 Python3(ipykernel) 옵션을 선택하면 제목 없는 Python 노트북이 있는 새 탭이 열립니다. 파일 이름을 지정하십시오. 이 자습서에서 파일 이름은 convert_data.ipynb입니다.

그런 다음 브라우저 Jupyter Notebook의 첫 번째 셀에서 pip를 사용하여 필요한 종속성을 설치합니다.

pip install pandas
pip install requests

DataFrame 데이터 구조는 requests 모듈을 통해서만 액세스할 수 있으므로 URL에 액세스할 수 있습니다.

Jupyter Notebook에 명령을 추가한 후 실행을 눌러 실행합니다.

Jupyter Notebook은 종속성이 다운로드되고 있음을 나타내는 실행 출력을 제공합니다. 새 입력 셀은 이 출력 아래에서 사용할 수 있으며 여기에서 다음 코드 행을 실행할 수 있습니다.

다음으로, 다음 명령을 실행하여 방금 설치한 모듈을 가져옵니다.

import pandas as pd
import requests

pdpandas 모듈을 호출하기 위한 바로 가기 역할을 합니다. pd만 작성하여 pandas 모듈을 호출할 수 있습니다.

이 단계에서는 Jupyter Notebook 환경을 준비했습니다. 다음으로 몇 가지 기본 변환을 수행하여 사전에서 DataFrame을 만듭니다.

2단계 — 정렬된 API 데이터를 pandas DataFrame으로 변환

정렬되지 않은 API 끝점에서 데이터를 가져오기 전에 먼저 다양한 형식의 사전과 URL에서 구성된 API 데이터에서 DataFrame을 생성합니다.

많은 API 끝점에서 키는 일반적으로 열 이름을 나타내고 해당 키의 값은 각 열에 속하는 요소를 나타냅니다. 그러나 일부 API 엔드포인트는 이 형식으로 표시되지 않습니다. 즉, pandas DataFrame을 만들 수 있는 읽기 가능한 사전을 만들려면 열 이름과 해당 데이터를 추출하는 방법이 필요합니다. 기존 API 끝점을 pandas DataFrame으로 변환하기 위한 몇 가지 일반적인 방법론을 검토하면 이 작업에 도움이 될 것입니다.

이 단계에서는 몇 가지 일반적인 방법을 사용하여 다양한 형식의 사전에서 DataFrame을 생성합니다.

방법 1 - 사전 목록에서 DataFrame 만들기

이 방법에서 목록 내의 각 사전은 최종 DataFrame의 데이터 행을 나타냅니다. DataFrame 구조에는 열에 속하는 요소의 값과 함께 열 이름을 나타내는 키가 있습니다.

이 방법의 경우 세 개인의 정보와 함께 Age, IDName 열이 있는 DataFrame을 만듭니다.

새 셀에서 다음 코드를 실행하여 dict1 변수에 할당된 사전 목록의 형식을 지정합니다(이름을 원하는 이름으로 대체해도 됨).

dict1=[{"Age":41,"ID":1234,"Name":"Bella"},{"Age":24,"ID":5678,"Name":"Mark"},{"Age":26,"ID":2341,"Name":"John"}]

data=pd.DataFrame(dict1)

data.head()

dict1 변수에 사전 목록을 할당합니다. 목록 내의 각 사전은 결과 DataFrame의 단일 행을 나타냅니다. Age, IDName 키는 열 이름을 나타냅니다. 각 키에 할당된 값은 해당 행에 대한 해당 열의 값을 나타냅니다. 그런 다음 이 사전을 pandas 모듈에 전달하여 DataFrame을 만듭니다.

다음 DataFrame이 인쇄됩니다.

Output
Age ID Name 0 41 1234 Bella 1 24 5678 Mark 2 26 2341 John

이 DataFrame은 사전 목록에서 생성되었습니다. dict1 목록 내의 각 사전에 정의한 키는 획득한 DataFrame의 열 이름이며 이러한 사전의 값은 행 방향 데이터를 나타냅니다.

방법 2 - 단일 사전에서 DataFrame 생성

이전 방법에서는 행을 기준으로 데이터를 정의했기 때문에 목록에 여러 사전을 입력해야 했습니다. 각 사전은 행 방향 데이터를 나타냅니다. 여기서 키는 열 이름이고 값은 열에 속하는 요소입니다.

이제 열 방식으로 데이터를 정의합니다. 이번에는 키가 열 이름을 나타내지만 값이 해당 열의 세로 데이터를 나타내는 목록인 사전을 사용합니다.

이 방법을 사용하려면 이전 섹션에서 사용한 것과 동일한 데이터를 사용할 수 있습니다. 새 셀에서 다음 줄을 실행합니다.

dict2={"Age":[41,24,26],"ID":[1234,5678,2341],"Name":["Bella","Mark","John"]}

data=pd.DataFrame(dict2)

data.head()

여기에서 사전을 사용하여 열 단위 데이터를 정의합니다. dict2 사전의 키는 Age, IDName 열 이름입니다. 코드>. 각 키의 값은 각 열의 데이터를 나타내는 목록입니다.

다음 DataFrame이 화면에 인쇄됩니다.

Output
Age ID Name 0 41 1234 Bella 1 24 5678 Mark 2 26 2341 John

dict2 사전의 키는 열 이름(Age, IDName을 나타냅니다.), 각 열은 각 키의 값으로 정의한 목록으로 채워집니다. 예를 들어 Age 열의 값은 41, 2426입니다.

예상대로 두 방법 모두 동일한 결과를 생성합니다. 처음 두 메서드의 출력은 동일하지만 행 방식과 열 방식을 모두 사용하여 DataFrame을 만들 수 있습니다.

방법 3 — URL에서 API 데이터로 DataFrame 생성

이 방법에서는 URL에서 추출한 API 데이터로 DataFrame을 만듭니다. API 관련 URL 내에서 데이터는 종종 방법 1에서 사용된 데이터와 유사한 사전 목록에 표시됩니다. 그러나 데이터를 하드 코딩하는 대신 requests 를 사용하여 URL에서 API 데이터에 액세스합니다. URL에 대한 액세스 권한을 얻는 데 도움이 되는 모듈.

이 방법에서는 API 형식으로 국가 및 수도 목록을 제공하는 JSON API: Countries with Capitals에 대한 URL을 사용합니다. API를 보려면 브라우저에서 다음 URL을 방문하십시오.

  1. https://raw.githubusercontent.com/dariusk/corpora/master/data/geography/countries_with_capitals.json

다음은 URL로 표시되는 API 데이터의 시작 부분입니다.

{
  "description": "A list of countries and its respective capitals.",
  "countries": [
    {"name":"Afghanistan", "capital":"Kabul"},
    {"name":"Albania", "capital":"Tirana"},
    {"name":"Algeria", "capital":"Algiers"},
    {"name":"Andorra", "capital":"Andorra la Vella"},
    {"name":"Angola", "capital":"Luanda"},
    {"name":"Antigua & Barbuda", "capital":"St. John's"},
    {"name":"Argentina", "capital":"Buenos Aires"},
    {"name":"Armenia", "capital":"Yerevan"},
    {"name":"Australia", "capital":"Canberra"},
    {"name":"Austria", "capital":"Vienna"},
...

API는 인식 가능한 형식으로 표시됩니다. 외부 사전의 countries 키에는 사전 목록이 포함되며 여기서 namecapital은 열입니다. 이름과 해당 값은 행 방향 데이터입니다.

이 URL에서 pandas DataFrame을 만들려면 새 셀에서 다음 코드를 실행합니다.

response=requests.get('https://raw.githubusercontent.com/dariusk/corpora/master/data/geography/countries_with_capitals.json').json()

df1=pd.DataFrame(response['countries'])

df1.head()

요청 모듈을 사용하면 URL에 대한 액세스 권한을 얻을 수 있습니다. 이 경우 URL을 json 파일로 읽고 읽은 데이터를 변수 response에 할당합니다. 다음으로 이 사전 목록(countries 키에 대한 값으로 제공됨)을 pandas에 제공하면 DataFrame이 제공됩니다. df1은 지정된 API 끝점에서 데이터를 성공적으로 추출했을 때 얻은 DataFrame입니다.

위의 코드를 실행하면 다음 DataFrame을 받게 됩니다.

Output
name capital 0 Afghanistan Kabul 1 Albania Tirana 2 Algeria Algiers 3 Andorra Andorra la Vella 4 Angola Luanda

국가 및 수도 목록을 pandas DataFrame에 전달한 후 얻은 DataFrame입니다. 이 코드를 실행할 때 사전 목록(countries 키에 대한 값으로 표시됨)을 pandas DataFrame 모듈에 전달했습니다. 열 이름은 이 목록의 모든 사전에 키로 존재하기 때문에 namecapital이며 해당 값은 행 방향 데이터를 나타냅니다(모든 사전은 행을 나타내므로 ).

지금까지 기본 사전 및 구조화된 API 끝점에서 DataFrame을 만들었습니다. 구조화된 API를 포함하는 URL을 처리할 때 데이터는 일반적으로 방법 1에서 사용되는 형식으로 표시됩니다. 각 사전은 행 방향 데이터를 나타내는 사전 목록입니다. API 데이터가 구조화되지 않은 경우 방법 1 또는 2의 형식(행 방향 또는 열 방향)을 사용하여 열 이름과 해당 데이터를 추출할 수 있습니다. 다음 단계에서는 이 단계의 전략 중 일부를 결합하여 구조화되지 않은 API 끝점에서 데이터를 가져옵니다.

3단계 — 정렬되지 않은 API 데이터를 pandas DataFrame으로 변환

지금까지 여러 방법을 사용하여 주문한 데이터를 pandas Dataframe으로 변환했습니다. 이제 다른 형식의 데이터로 작업합니다. 이 새 URL의 API 데이터는 일반적인 형식이 아니므로 열 이름과 해당 데이터를 식별하기 어렵습니다.

이 정렬되지 않은 데이터에서 DataFrame을 생성하려면 추가 단계를 수행해야 합니다. 먼저 열 이름과 모든 열의 값을 추출한 다음 열 이름을 키로 정의하고 열 요소(목록의)를 사전의 값으로 정의합니다. 궁극적으로 방법 2에서 사용된 형식과 유사한 표현 가능한 사전을 얻고 DataFrame으로 변환하기 위해 pandas에 제공합니다.

이 단계에서는 NY School Demographics and Accountability Snapshot의 데이터를 사용합니다.

API 끝점 내에서 열 이름 추적

이 섹션에서는 API 엔드포인트 내에 포함된 데이터의 열과 관련된 정보를 추적합니다.

샘플 데이터에 액세스하려면 선택한 웹 브라우저를 통해 다음 URL을 엽니다.

  1. https://data.cityofnewyork.us/api/views/ihfw-zy9j/rows.json

이 URL의 데이터는 2단계에서 작업한 데이터보다 표현하기 어렵습니다. NY Snapshot 데이터는 한 형식 또는 다른 형식의 사전을 나타내지만 키가 열 이름을 나타내고 값이 열의 요소를 나타내는 사전이 아닙니다. 행 방향 또는 열 방향 데이터를 나타내는 간단한 사전은 없는 것 같습니다.

DataFrame의 열과 관련된 정보를 찾는 것으로 시작합니다. 브라우저에서 API URL에 액세스할 때 CTRL+F를 입력하고 columns를 검색합니다.

...
"columns" : [ {
        "id" : -1,
        "name" : "sid",
        "dataTypeName" : "meta_data",
        "fieldName" : ":sid",
        "position" : 0,
        "renderTypeName" : "meta_data",
        "format" : { },
        "flags" : [ "hidden" ]
      }, {
        "id" : -1,
        "name" : "id",
        "dataTypeName" : "meta_data",
        "fieldName" : ":id",
        "position" : 0,
        "renderTypeName" : "meta_data",
        "format" : { },
        "flags" : [ "hidden" ]
      }, {
        "id" : -1,
        "name" : "position",
        "dataTypeName" : "meta_data",
        "fieldName" : ":position",
        "position" : 0,
        "renderTypeName" : "meta_data",
        "format" : { },
        "flags" : [ "hidden" ]
...

columns 키의 값 목록에는 여러 사전이 있습니다. 각 사전 내에서 dataTypeName 키의 값을 확인하십시오. 처음 8개 사전의 경우 dataTypeName 키 값은 meta_data입니다. 메타데이터는 데이터를 설명하는 데이터입니다. 이 경우 메타데이터는 테이블 내에 포함된 데이터가 아닙니다. 오히려 테이블 전체를 설명하는 데이터입니다. 따라서 이 8개의 사전(meta_datadataTypeName 키의 값으로 있음)은 다음과 같은 정보를 나타내지 않습니다. 테이블 내에 있는 열.

그러나 이 목록에서 계속 진행하면 meta_datadataTypeName 키의 첫 번째 모양에 유의하십시오. > 값으로:

...
}, {
       "id" : -1,
       "name" : "meta",
       "dataTypeName" : "meta_data",
       "fieldName" : ":meta",
       "position" : 0,
       "renderTypeName" : "meta_data",
       "format" : { },
       "flags" : [ "hidden" ]
     }, {
       "id" : 45985351,
       "name" : "DBN",
       "dataTypeName" : "text",
       "fieldName" : "dbn",
       "position" : 1,
       "renderTypeName" : "text",
       "tableColumnId" : 8032537,
       "cachedContents" : {
         "non_null" : "10075",
...

id에 대한 값이 45985351인 사전은 meta_data가 없는 첫 번째 사전입니다. dataTypeName 키에 대한 값으로 지정합니다. 대신 값은 text입니다. 이 사전은 최종 데이터 세트의 첫 번째 열에 대한 정보를 나타냅니다. 이 열의 요소는 text 형식(즉, 문자열)입니다. 이 첫 번째 사전에는 name 키에 대한 DBN 값이 있으며, 이는 DBN이 첫 번째 열의 이름임을 나타냅니다. 이 사전 다음의 모든 사전(columns 키 내)에는 dataTypeName 키에 대한 값으로 meta_data가 없습니다. DataFrame의 다음 열에 대한 정보를 나타냅니다.

이제 테이블의 열에 대한 정보를 찾을 수 있는 위치에 대한 기본적인 이해가 있으므로 다음 단계에서 이러한 열의 이름을 얻습니다.

열 이름 찾기

이 섹션에서는 API 끝점의 모든 열 이름을 columns라는 목록에 추가합니다. Jupyter Notebook의 새 셀에 다음 줄을 추가하고 셀을 실행합니다.

  1. response=requests.get('https://data.cityofnewyork.us/api/views/ihfw-zy9j/rows.json').json()
  2. columns=[]
  3. for i in response['meta']['view']['columns']:
  4. if(i['dataTypeName']=='meta_data'):
  5. continue
  6. else:
  7. columns.append(i['name'])

2단계의 방법 3에서 수행한 것과 유사하게 requests 모듈을 통해 이 URL에 있는 데이터를 읽고 response라는 변수에 할당합니다.

3행에서 columns 목록을 정의합니다. 5행에서 view 키 값 내에서 columns 키를 정의하고, 이 키는 meta 키 값 내에서 정의됩니다. .

for 루프는 columns 키에 연결된 목록에 있는 모든 사전을 반복하고 해당 사전의 dataTypeName 키 값을 확인합니다. 현재 사전의 dataTypeName 키 값이 meta_data와 같으면 다음 사전으로 건너뜁니다. 그렇지 않은 경우 name 키 값을 columns 목록에 추가합니다.

다음으로 columns 목록의 내용을 확인합니다. 새 셀에서 다음 줄을 실행합니다.

columns

열 이름이 화면에 인쇄됩니다.

Output
['DBN', 'Name', 'schoolyear', 'fl_percent', 'frl_percent', 'total_enrollment', 'prek', 'k', 'grade1', 'grade2', 'grade3', 'grade4', 'grade5', 'grade6', 'grade7', 'grade8', 'grade9', 'grade10', 'grade11', 'grade12', 'ell_num', 'ell_percent', 'sped_num', 'sped_percent', 'ctt_num', 'selfcontained_num', 'asian_num', 'asian_per', 'black_num', 'black_per', 'hispanic_num', 'hispanic_per', 'white_num', 'white_per', 'male_num', 'male_per', 'female_num', 'female_per']

출력은 dataTypeNamemeta_data가 아닌 모든 열이 columns 목록에 추가되었음을 확인합니다.

이 섹션에서는 최종 DataFrame을 만드는 데 필요한 정렬되지 않은 API 끝점의 열 이름 목록을 얻었습니다. 다음으로 columns 목록에 정의된 열에 속하는 데이터를 추출합니다.

n개의 하위 목록 목록 정의

이 섹션에서는 API의 열 수를 결정하고 이 수에 해당하는 하위 목록 목록을 정의합니다.

궁극적으로 2단계의 방법 2를 사용하여 키가 열 이름을 나타내고 해당 키의 값이 각 열의 요소를 나타내는 목록인 사전에서 pandas DataFrame을 가져옵니다. API에서 열 수를 결정한 후 동일한 수의 하위 목록 목록을 정의합니다. 여기서 각 하위 목록에는 각 열에 대한 데이터가 포함됩니다.

이 작업을 사용하여 사전을 정의하면 columns 목록과 하위 목록 목록을 반복하여 사전에 동적으로 추가할 수 있습니다. 예를 들어 인덱스 0의 하위 목록은 columns 목록의 인덱스 0에 있는 열 이름의 요소 목록 역할을 합니다. 마찬가지로 인덱스 1의 하위 목록은 columns 목록의 인덱스 1에 있는 열 이름의 요소 목록 역할을 합니다.

이전 단계에서 열 이름 목록을 얻었습니다. 이제 새 셀에서 다음 줄을 실행하여 이 목록의 길이를 확인합니다.

len(columns)

len(columns)columns 목록의 항목 수를 반환합니다.

API에 있는 열의 수가 화면에 인쇄됩니다.

Output
38

38 열이 있으므로 38 하위 목록의 목록을 정의합니다. 여기서 각 하위 목록에는 각 열에 대한 데이터가 포함됩니다.

새 셀에서 다음 코드를 실행하여 38 하위 목록의 목록(d)을 만듭니다.

d = [[] for x in  range(len(columns))]

d

목록을 만들려면 먼저 이름을 지정합니다(이 경우 d). 데이터 세트([])의 각 배열은 방금 찾은 38 열 범위의 데이터를 포함하는 새 하위 목록을 생성합니다.

다음 출력은 38 하위 목록의 목록을 보여줍니다.

Output
[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]

이러한 하위 목록은 아직 요소를 추가하지 않았기 때문에 처음에는 비어 있습니다.

이제 목록 d 내에 38 하위 목록을 만들었습니다. 이러한 38 하위 목록의 내용은 38 열에 대한 열별 데이터를 나타냅니다. 다음에 해당 콘텐츠를 추가합니다.

열 값 얻기

이 섹션에서는 API 끝점에서 열 방식 데이터를 추출하고 해당 데이터를 마지막 단계에서 생성한 38 하위 목록에 추가합니다. 이렇게 하려면 먼저 전체 API에서 data 키가 있는 위치를 찾아야 합니다. data 키의 값은 테이블의 내용을 나타냅니다.

브라우저에서 API URL에 액세스할 때 CTRL+F를 입력하고 data를 검색합니다. 약 73 항목이 발생합니다. 다음을 찾을 수 있는 마지막 항목을 찾습니다.

...
"data" : [ [ "row-h6zp~rx75.iwiv", "00000000-0000-0000-C205-81EF0C7F0969", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20052006", "89.4", null, "281", "15", "36", "40", "33", "38", "52", "29", "38", null, null, null, null, null, null, "36", "12.8", "57", "20.3", "25", "9", "10", "3.6", "74", "26.3", "189", "67.3", "5", "1.8", "158", "56.2", "123", "43.8" ]
, [ "row-bgbf_ntuw.ckdq", "00000000-0000-0000-9AF5-4D58BAF51C20", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20062007", "89.4", null, "243", "15", "29", "39", "38", "34", "42", "46", null, null, null, null, null, null, null, "38", "15.6", "55", "22.6", "19", "15", "18", "7.4", "68", "28", "153", "63", "4", "1.6", "140", "57.6", "103", "42.4" ]
, [ "row-mspc-8wz5_uxb8", "00000000-0000-0000-9E11-73B99A1B02D9", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20072008", "89.4", null, "261", "18", "43", "39", "36", "38", "47", "40", null, null, null, null, null, null, null, "52", "19.9", "60", "23", "20", "14", "16", "6.1", "77", "29.5", "157", "60.2", "7", "2.7", "143", "54.8", "118", "45.2" ]
, [ "row-p6za~9ikt~ums7", "00000000-0000-0000-D2CD-5904BA5DC16E", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20082009", "89.4", null, "252", "17", "37", "44", "32", "34", "39", "49", null, null, null, null, null, null, null, "48", "19", "62", "24.6", "21", "17", "16", "6.3", "75", "29.8", "149", "59.1", "7", "2.8", "149", "59.1", "103", "40.9" ]
, [ "row-55ss_ktcg~w7ru", "00000000-0000-0000-9425-35118FA9200F", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20092010", "   ", "96.5", "208", "16", "40", "28", "32", "30", "24", "38", null, null, null, null, null, null, null, "40", "19.2", "46", "22.1", "14", "14", "16", "7.7", "67", "32.2", "118", "56.7", "6", "2.9", "124", "59.6", "84", "40.4" ]
, [ "row-ugmn-sxmy_fyiu", "00000000-0000-0000-2070-ABC0343F1148", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20102011", "   ", "96.5", "203", "13", "37", "35", "33", "30", "30", "25", null, null, null, null, null, null, null, "30", "14.8", "46", "22.7", "21", "9", "13", "6.4", "75", "36.9", "110", "54.2", "4", "2", "113", "55.7", "90", "44.3" ]
, [ "row-a4rf-xqy7~fvkh", "00000000-0000-0000-AF7F-41FA5EB8E91E", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE                       ", "20112012", null, "89.4", "189", "13", "31", "35", "28", "25", "28", "29", "    ", "    ", "    ", "    ", "    ", "    ", "    ", "20", "10.6", "40", "21.2", "23", "7", "12", "6.3", "63", "33.3", "109", "57.7", "4", "2.1", "97", "51.3", "92", "48.7" ]
...

data 키에 할당된 목록 내의 각 하위 목록은 예상 DataFrame의 단일 행 값을 나타냅니다. 실제 행 방향 데이터가 시작되는 위치를 확인하려면 열 수를 data 섹션의 단일 하위 목록 내의 요소 수와 비교해야 합니다.

새 셀에서 다음 줄을 실행하여 열 수를 확인합니다.

len(columns)

다음 출력은 열 수를 인쇄합니다.

Output
38

다음으로 data 내의 첫 번째 하위 목록 길이(첫 번째 행의 값 수)를 확인합니다.


len(response['data'][0])

ID 번호가 0data 내의 첫 번째 하위 목록을 지정합니다.

다음 출력은 data 내의 첫 번째 하위 목록에 있는 요소 수를 인쇄합니다.

Output
46

데이터가 행 방향이므로 첫 번째 하위 목록의 요소 수(46)가 열 수(38)와 같을 것이라고 생각할 수 있습니다. 그러나 각 하위 목록의 길이는 46이며, 이는 838보다 큽니다. dataTypeName 키의 값으로 meta_data가 있는 columns 키 내에서 8 사전을 찾았다는 것을 기억하십시오. 따라서 이러한 하위 목록의 시작 부분에 표시되는 이러한 추가 8 값은 메타데이터 값을 나타내며 테이블의 내용을 나타내지 않습니다.

목록의 인덱스는 0에서 시작하므로 이제 0에서 7(포함) 범위에 있는 이러한 하위 목록의 값이 다음을 나타내지 않는다는 것을 알고 있습니다. DataFrame 콘텐츠는 메타데이터 값을 나타냅니다. 따라서 행 방향 데이터의 내용은 인덱스 8에서 시작합니다.

인덱스 46-38(8)에서 시작하여 인덱스를 생성하는 루프를 사용하여 data 하위 목록 내에서 요소를 추가합니다. 46. 이를 테스트하기 위해 모든 하위 목록에서 모든 데이터를 추출하는 대신 첫 번째 행에서만 데이터를 추출합니다. 새 셀에서 다음 줄을 실행합니다.

count=0

for i in response['data'][0][len(response['data'][0])-len(columns):len(response['data'][0])]: #from index 8 to 45

    d[count].append(i)

    count=count+1

d

이 경우 변수 count는 첫 번째 행의 열 형식 데이터를 d의 n번째 하위 목록에 추가하는 데 도움이 됩니다.

그런 다음 코드는 data 내의 첫 번째 하위 목록을 반복하여 인덱스 8에서 시작하여 인덱스 45에서 끝나는 요소를 가져옵니다(결과는 38 요소).

length(response[data][0])data 키 내의 첫 번째 하위 목록의 길이를 나타내는 반면 len(columns)는 최종 DataFrame의 열 수를 나타내는 목록 의 길이.

다음은 처음 몇 번의 반복에서 일어나는 일에 대한 개요입니다. 개수는 처음에 0입니다. for 루프를 입력하면 iresponse[data][0][8]이며, 첫 번째에서 메타데이터가 아닌 첫 번째 값입니다. 하위 목록. 그런 다음 이 i 값을 d[0]에 추가합니다. 괄호 안의 0은 현재 카운트 값입니다. 결과적으로 이 값을 d 목록 내의 첫 번째 하위 목록에 추가합니다.

개수는 1씩 증가합니다. iresponse[data][0][9](첫 번째 하위 목록에서 메타데이터가 아닌 두 번째 값)인 경우 i를 추가합니다. 값을 d[1](count1<만큼 증가했기 때문에 0은 이제 1입니다. 이전 반복에서). 결과적으로 이 값은 d 목록 내의 두 번째 하위 목록에 추가됩니다. 이 프로세스는 색인 45에 도달할 때까지 계속됩니다. 위 코드의 마지막 줄은 하위 목록의 업데이트된 d 목록을 표시합니다.

출력에는 첫 번째 행의 데이터가 표시됩니다.

Output
[['01M015'], ['P.S. 015 ROBERTO CLEMENTE'], ['20052006'], ['89.4'], [None], ['281'], ['15'], ['36'], ['40'], ['33'], ['38'], ['52'], ['29'], ['38'], [None], [None], [None], [None], [None], [None], ['36'], ['12.8'], ['57'], ['20.3'], ['25'], ['9'], ['10'], ['3.6'], ['74'], ['26.3'], ['189'], ['67.3'], ['5'], ['1.8'], ['158'], ['56.2'], ['123'], ['43.8']]

첫 번째 행에 올바른 데이터가 포함되어 있는지 확인하려면 API URL의 data 키에 대한 값으로 제공되는 목록 내의 첫 번째 하위 목록과 비교하십시오.

...
"data" : [ [ "row-h6zp~rx75.iwiv", "00000000-0000-0000-C205-81EF0C7F0969", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20052006", "89.4", null, "281", "15", "36", "40", "33", "38", "52", "29", "38", null, null, null, null, null, null, "36", "12.8", "57", "20.3", "25", "9", "10", "3.6", "74", "26.3", "189", "67.3", "5", "1.8", "158", "56.2", "123", "43.8" ]
...

전체 데이터 스니펫을 보려면 위의 상자 오른쪽으로 스크롤해야 할 수도 있습니다.

처음 몇 개의 값(색인 0에서 7까지)은 메타데이터 열과 관련된 정보를 나타냅니다. 첫 번째 하위 목록 내에서 강조 표시된 값(색인 8에서 45까지)은 성공적으로 추출한 첫 번째 행의 값입니다.

모든 행에 대해 동일한 작업을 수행하려면 이전 코드를 업데이트해야 합니다. 먼저 새 셀에서 다음 줄을 실행하여 38 하위 목록의 d 목록을 재정의합니다.

d = [[] for x in  range(len(columns))]

하위 목록 d 목록에 현재 첫 번째 행의 모든 요소가 포함되어 있으므로 d 목록을 재정의합니다. 이제 목표는 첫 번째 행을 포함하여 나머지 모든 행에 대해 동일한 작업을 수행하는 것입니다.

이제 38 하위 목록의 새 목록을 만들었으므로 새 셀에서 다음 줄을 실행하여 예상 DataFrame의 모든 행에 대한 데이터 추출을 수행합니다.

  1. for i in response['data']:
  2. count=0
  3. for j in range(len(response['data'][0])-len(columns),len(response['data'][0])):
  4. d[count].append(i[j])
  5. count+=1

1행에서 for i in response[data]i가 각 하위 목록에 하나씩 할당되고 있음을 의미합니다.

다음은 몇 가지 반복에 대한 개요입니다. data 키에 할당된 목록 내의 첫 번째 하위 목록이 있는 i로 시작합니다. 개수는 0입니다.

3행에서는 모든 하위 목록의 색인 8에서 46까지의 요소를 반복할 수 있습니다. Python에서 for 루프의 상한은 배타적이므로 인덱스 8에서 45까지 요소를 가져옵니다.

d[count].append(i[j])d[0].append(i[8])를 의미하며 인덱스 <에 요소를 추가한다는 의미입니다. 첫 번째 하위 목록(현재 i에 할당됨)의8을 목록 d의 첫 번째 하위 목록으로 바꿉니다. count1씩 증가합니다. 당신은 계속 내부 루프에 있습니다. j는 이제 9입니다.

라인 4는 이제 d[1].append(i[9])이며, 이는 첫 번째 하위 목록의 인덱스 9에 있는 요소를 의미합니다(여전히 i 에 할당됨). 는 외부 루프에 따라) 목록 d의 두 번째 하위 목록에 추가됩니다. 카운트가 증가합니다. 내부 루프는 단일 행의 모든 값을 d의 모든 하위 목록에 추가할 때까지 계속됩니다.

내부 루프의 끝에서 첫 번째 행의 마지막 값을 추가하는 작업은 d[37].append(i[45])와 같습니다. i의 첫 번째 반복이 끝날 때 목록 d는 이전 출력과 동일하게 보입니다(모든 하위 목록에 요소가 하나만 있음) d).

내부 루프에서 벗어나면 외부 루프로 이동합니다. idata 키에 할당된 목록 내의 다음 하위 목록(두 번째 하위 목록)에 할당됩니다. 카운트 값은 이제 0으로 돌아갑니다.

i의 두 번째 반복에서 내부 루프를 벗어나면 d의 모든 하위 목록이 이제 각각 두 개의 값을 갖게 됩니다. 각 하위 목록의 두 번째 값은 두 번째 행에 속하는 데이터를 나타냅니다. 이것은 data 키에 할당된 목록 내에 있는 모든 하위 목록에 대해 계속됩니다.

획득한 데이터가 d의 하위 목록에서 어떻게 보이는지에 대한 아이디어를 제공하기 위해 의 처음 3개 하위 목록에서 처음 5개 요소를 검색합니다. d. 결과 DataFrame에서 이 값은 처음 3개 열의 처음 5개 요소가 됩니다.

d의 인덱스 0에서 하위 목록의 처음 5개 요소를 검토하여 시작합니다.

d[0][0:5]

출력에는 다음이 표시됩니다.

Output
['01M015', '01M015', '01M015', '01M015', '01M015']

브라우저에서 볼 때 API의 data 섹션과 비교하여 출력을 확인할 수 있습니다.

...
"data" : [ [ "row-h6zp~rx75.iwiv", "00000000-0000-0000-C205-81EF0C7F0969", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20052006", "89.4", null, "281", "15", "36", "40", "33", "38", "52", "29", "38", null, null, null, null, null, null, "36", "12.8", "57", "20.3", "25", "9", "10", "3.6", "74", "26.3", "189", "67.3", "5", "1.8", "158", "56.2", "123", "43.8" ]
, [ "row-bgbf_ntuw.ckdq", "00000000-0000-0000-9AF5-4D58BAF51C20", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20062007", "89.4", null, "243", "15", "29", "39", "38", "34", "42", "46", null, null, null, null, null, null, null, "38", "15.6", "55", "22.6", "19", "15", "18", "7.4", "68", "28", "153", "63", "4", "1.6", "140", "57.6", "103", "42.4" ]
, [ "row-mspc-8wz5_uxb8", "00000000-0000-0000-9E11-73B99A1B02D9", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20072008", "89.4", null, "261", "18", "43", "39", "36", "38", "47", "40", null, null, null, null, null, null, null, "52", "19.9", "60", "23", "20", "14", "16", "6.1", "77", "29.5", "157", "60.2", "7", "2.7", "143", "54.8", "118", "45.2" ]
, [ "row-p6za~9ikt~ums7", "00000000-0000-0000-D2CD-5904BA5DC16E", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20082009", "89.4", null, "252", "17", "37", "44", "32", "34", "39", "49", null, null, null, null, null, null, null, "48", "19", "62", "24.6", "21", "17", "16", "6.3", "75", "29.8", "149", "59.1", "7", "2.8", "149", "59.1", "103", "40.9" ]
, [ "row-55ss_ktcg~w7ru", "00000000-0000-0000-9425-35118FA9200F", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20092010", "   ", "96.5", "208", "16", "40", "28", "32", "30", "24", "38", null, null, null, null, null, null, null, "40", "19.2", "46", "22.1", "14", "14", "16", "7.7", "67", "32.2", "118", "56.7", "6", "2.9", "124", "59.6", "84", "40.4" ]
,
...

전체 데이터 스니펫을 보려면 위의 상자 오른쪽으로 스크롤해야 할 수도 있습니다.

얻은 값은 각 하위 목록의 인덱스 8에 있는 강조 표시된 값과 일치합니다. 인덱스 범위 0-7(포함)에 있는 이러한 하위 목록의 요소는 예상 DataFrame 값이 아니라 메타데이터 값을 나타냅니다. 궁극적으로 이러한 값은 columns의 인덱스 0에 있는 열의 처음 5개 요소를 나타냅니다.

다음으로 d의 인덱스 1에서 하위 목록의 처음 5개 요소를 검토할 수 있습니다.

d[1][0:5]

두 번째 하위 목록의 처음 5개 요소가 화면에 인쇄됩니다.

Output
['P.S. 015 ROBERTO CLEMENTE', 'P.S. 015 ROBERTO CLEMENTE', 'P.S. 015 ROBERTO CLEMENTE', 'P.S. 015 ROBERTO CLEMENTE', 'P.S. 015 ROBERTO CLEMENTE']

이러한 값은 columns 목록의 인덱스 1에 있는 열의 처음 5개 요소를 나타냅니다: Name. API URL의 data 섹션으로 출력을 확인합니다.

...
"data" : [ [ "row-h6zp~rx75.iwiv", "00000000-0000-0000-C205-81EF0C7F0969", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20052006", "89.4", null, "281", "15", "36", "40", "33", "38", "52", "29", "38", null, null, null, null, null, null, "36", "12.8", "57", "20.3", "25", "9", "10", "3.6", "74", "26.3", "189", "67.3", "5", "1.8", "158", "56.2", "123", "43.8" ]
, [ "row-bgbf_ntuw.ckdq", "00000000-0000-0000-9AF5-4D58BAF51C20", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20062007", "89.4", null, "243", "15", "29", "39", "38", "34", "42", "46", null, null, null, null, null, null, null, "38", "15.6", "55", "22.6", "19", "15", "18", "7.4", "68", "28", "153", "63", "4", "1.6", "140", "57.6", "103", "42.4" ]
, [ "row-mspc-8wz5_uxb8", "00000000-0000-0000-9E11-73B99A1B02D9", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20072008", "89.4", null, "261", "18", "43", "39", "36", "38", "47", "40", null, null, null, null, null, null, null, "52", "19.9", "60", "23", "20", "14", "16", "6.1", "77", "29.5", "157", "60.2", "7", "2.7", "143", "54.8", "118", "45.2" ]
, [ "row-p6za~9ikt~ums7", "00000000-0000-0000-D2CD-5904BA5DC16E", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20082009", "89.4", null, "252", "17", "37", "44", "32", "34", "39", "49", null, null, null, null, null, null, null, "48", "19", "62", "24.6", "21", "17", "16", "6.3", "75", "29.8", "149", "59.1", "7", "2.8", "149", "59.1", "103", "40.9" ]
, [ "row-55ss_ktcg~w7ru", "00000000-0000-0000-9425-35118FA9200F", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20092010", "   ", "96.5", "208", "16", "40", "28", "32", "30", "24", "38", null, null, null, null, null, null, null, "40", "19.2", "46", "22.1", "14", "14", "16", "7.7", "67", "32.2", "118", "56.7", "6", "2.9", "124", "59.6", "84", "40.4" ]
,
...

전체 데이터 스니펫을 보려면 위의 상자 오른쪽으로 스크롤해야 할 수도 있습니다. 얻은 값은 강조 표시된 값과 일치합니다.

마지막으로 d의 인덱스 2에서 하위 목록의 처음 5개 요소를 검토합니다.

d[2][0:5]

다음 출력이 화면에 인쇄됩니다.

Output
['20052006', '20062007', '20072008', '20082009', '20092010']

API URL의 data 섹션으로 출력을 확인합니다.

...
"data" : [ [ "row-h6zp~rx75.iwiv", "00000000-0000-0000-C205-81EF0C7F0969", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20052006", "89.4", null, "281", "15", "36", "40", "33", "38", "52", "29", "38", null, null, null, null, null, null, "36", "12.8", "57", "20.3", "25", "9", "10", "3.6", "74", "26.3", "189", "67.3", "5", "1.8", "158", "56.2", "123", "43.8" ]
, [ "row-bgbf_ntuw.ckdq", "00000000-0000-0000-9AF5-4D58BAF51C20", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20062007", "89.4", null, "243", "15", "29", "39", "38", "34", "42", "46", null, null, null, null, null, null, null, "38", "15.6", "55", "22.6", "19", "15", "18", "7.4", "68", "28", "153", "63", "4", "1.6", "140", "57.6", "103", "42.4" ]
, [ "row-mspc-8wz5_uxb8", "00000000-0000-0000-9E11-73B99A1B02D9", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20072008", "89.4", null, "261", "18", "43", "39", "36", "38", "47", "40", null, null, null, null, null, null, null, "52", "19.9", "60", "23", "20", "14", "16", "6.1", "77", "29.5", "157", "60.2", "7", "2.7", "143", "54.8", "118", "45.2" ]
, [ "row-p6za~9ikt~ums7", "00000000-0000-0000-D2CD-5904BA5DC16E", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20082009", "89.4", null, "252", "17", "37", "44", "32", "34", "39", "49", null, null, null, null, null, null, null, "48", "19", "62", "24.6", "21", "17", "16", "6.3", "75", "29.8", "149", "59.1", "7", "2.8", "149", "59.1", "103", "40.9" ]
, [ "row-55ss_ktcg~w7ru", "00000000-0000-0000-9425-35118FA9200F", 0, 1425758466, null, 1425758466, null, "{ }", "01M015", "P.S. 015 ROBERTO CLEMENTE", "20092010", "   ", "96.5", "208", "16", "40", "28", "32", "30", "24", "38", null, null, null, null, null, null, null, "40", "19.2", "46", "22.1", "14", "14", "16", "7.7", "67", "32.2", "118", "56.7", "6", "2.9", "124", "59.6", "84", "40.4" ]
,
...

전체 데이터 스니펫을 보려면 위의 상자 오른쪽으로 스크롤해야 할 수도 있습니다. 얻은 값은 강조 표시된 값과 일치합니다. 궁극적으로 이러한 값은 columns 목록의 인덱스 2에 있는 열의 처음 5개 요소를 나타냅니다: schoolyear.

이 단계가 끝나면 모든 38 열의 모든 행에 대한 데이터를 성공적으로 추출하여 목록 38 하위 목록에 추가했습니다. >d. 이제 지금까지 얻은 데이터에서 pandas DataFrame을 생성하는 마지막 단계에 대한 준비가 되었습니다.

데이터 프레임용 사전 만들기

이 단계에서 각 38 열의 이름과 값을 추출했으며 이제 사전 형식으로 pandas DataFrame에 전달할 것입니다. 이 섹션에서는 키를 열 이름(목록 columns에서)으로 사용하여 사전을 만들고 해당 값은 <에서 가져온 38 하위 목록이 됩니다. 마크>d.

새 셀에서 다음 코드를 실행합니다.

json_dict={}

for i in  range(0,len(columns)):
	json_dict.update({columns[i]:d[i]})

0에서 최대 38까지 반복하고 키-값 쌍을 최종 사전인 json_dict에 추가합니다. 변환을 위해 pandas DataFrame에 전달합니다. 예를 들어 i0인 경우 인덱스 0에서 d의 하위 목록을 할당합니다. columns[0]로 표시되는 키 DBN에 대한 값으로, 나머지 인덱스에 대해 수행됩니다.

사전에서 얻은 키가 어떻게 보이는지 알아보려면 json_dict에 있는 모든 키를 검토하세요.

json_dict.keys()

최종 사전의 키 목록이 화면에 인쇄됩니다.

Output
dict_keys(['DBN', 'Name', 'schoolyear', 'fl_percent', 'frl_percent', 'total_enrollment', 'prek', 'k', 'grade1', 'grade2', 'grade3', 'grade4', 'grade5', 'grade6', 'grade7', 'grade8', 'grade9', 'grade10', 'grade11', 'grade12', 'ell_num', 'ell_percent', 'sped_num', 'sped_percent', 'ctt_num', 'selfcontained_num', 'asian_num', 'asian_per', 'black_num', 'black_per', 'hispanic_num', 'hispanic_per', 'white_num', 'white_per', 'male_num', 'male_per', 'female_num', 'female_per'])

d38 하위 목록은 json_dict에서 위의 38 키에 할당되었습니다. . 따라서 키가 열 이름이고 값이 각 열의 요소를 포함하는 목록인 사전을 얻었습니다.

이제 DataFrame 생성을 위해 이 사전을 pandas에 전달합니다. 이 DataFrame은 선택한 변수 이름으로 호출할 수 있습니다(이 자습서에서는 data 사용).

data=pd.DataFrame(json_dict)

다음으로 결과 DataFrame의 일부를 검토합니다.

data.head()

DataFrame의 처음 5개 행이 화면에 인쇄됩니다.

Output
DBN Name schoolyear fl_percent frl_percent total_enrollment prek k grade1 grade2 ... black_num black_per hispanic_num hispanic_per white_num white_per male_num male_per female_num female_per 0 01M015 P.S. 015 ROBERTO CLEMENTE 20052006 89.4 None 281 15 36 40 33 ... 74 26.3 189 67.3 5 1.8 158 56.2 123 43.8 1 01M015 P.S. 015 ROBERTO CLEMENTE 20062007 89.4 None 243 15 29 39 38 ... 68 28 153 63 4 1.6 140 57.6 103 42.4 2 01M015 P.S. 015 ROBERTO CLEMENTE 20072008 89.4 None 261 18 43 39 36 ... 77 29.5 157 60.2 7 2.7 143 54.8 118 45.2 3 01M015 P.S. 015 ROBERTO CLEMENTE 20082009 89.4 None 252 17 37 44 32 ... 75 29.8 149 59.1 7 2.8 149 59.1 103 40.9 4 01M015 P.S. 015 ROBERTO CLEMENTE 20092010 96.5 208 16 40 28 32 ... 67 32.2 118 56.7 6 2.9 124 59.6 84 40.4

전체 DataFrame head를 보려면 위의 상자 오른쪽으로 스크롤해야 할 수도 있습니다. URL에서 추출한 데이터를 전달하여 DataFrame을 성공적으로 생성했습니다.

결론

이 자습서에서는 다양한 형식과 URL의 사전에서 pandas DataFrame을 생성하는 몇 가지 일반적인 방법을 사용했습니다. 또한 열과 해당 값이 간단한 방식으로 표시되지 않는 API 끝점에서 DataFrame을 만들었습니다.

이 자습서는 고유한 방법을 사용하여 비정형 API 끝점 또는 사전에서 추출한 데이터로 DataFrame을 만드는 방법을 이해하는 데 도움이 됩니다. pandas DataFrames에 대한 자세한 내용은 pandas 자습서를 확인하세요.