사실 업무를 할 때 DataFrame으로 변형을 안하고
Json으로 사용해도 무관하긴 하다.
DataFrame으로 변형하면 파이썬을 이용해서 필요한 데이터를 정비 가능하다는 장점이 존재할 뿐!
그러면 오늘은 DataFrame을 이용해서 원하는 데이터를 찾아봅시다!
사진은 보안상 걱정되는 입장이라서 최대한 모자이크 처리를 진행했습니다.
https://sg-moomin.tistory.com/27
만약에 파씽을 못했다면? 위에 포스팅을 한번 보고 진행하는걸 추천드립니다!
import json
with open('자신의 불러올 파일명' ,encoding='utf-8') as json_file:
jData = json.load(json_file)
우선 파일을 호출해옵니다.
json 형식의 파일을 호출하기 위해 json을 임폴트 해주고
해당 파일 경로에 따라서 파일을 읽어 옵니다.
여기서 포인트!
자신의 불러올 파일명이 각자 다를텐데 경로를 지정해줘야 합니다.
Ex) c:C:/Users/AAA/BBB/test.json
파일을 불러왔다면 이제 pandas를 호출해줍니다.
import pandas as pd
df = pd.DataFrame(jData)
df
pandas는 2차원 배열을 만들기 위한 클래스라고 생각하면 쉽습니다.
즉 표를 만들기 위해 호출한다고 이해하면 굿!
정의는 다르겠지만 사실 코딩을 하면서 모든 정의를 암기할 수 없기 때문에
어느정도 코딩을 하면서 흐름을 파악하는 것도 한가지 방법!
불러온 json형태의 파일을 DataFrame으로 변환해 준 후
df 변수에 입력 후 출력합니다.
데이터를 직접 보여드릴 수 없어서 포커싱만 해서 보여드리면!
대략적인 컬럼들을 확인 할 수 있습니다.
이렇게 DataFrame을 제작을 완료했는데...
사실 DataFrame을 제작한 이유는 업무의 효율성을 위해서 만들었던 것!
간단히 DataFrame에 대해 살펴보자!
df['baseLawNm'].notnull()
이 코드는 내가 해당 DataFrame에 baseLawNm라는 column이 null값인지 참 거짓으로 확인할 수 있다.
len(df)
df.columns
len을 이용하면 row의 개수를 알 수 있고
columns를 하면 모든 컬럼명을 알 수 있다.
다양한 속성들을 이용했으나 시간상 속성 정리는 추후에~
우선 글쓴이는 여기서 계약조건에 대해서 구분을 하기 위해 반복문으로 코딩을 했다.
tempering = []
count = 0
for i in df['cntrctCnclsMthdNm']:
if(df['cntrctCnclsMthdNm'][count] == '제한경쟁'):
tempering = df.loc[count]
count += 1
else:
count += 1
continue
처음에 이렇게 코딩했으나...
나란 녀석 멍청함을 확인 할 수 있었다..
일단 list인데 왜 append를 사용하지 않았는지....
그리고 loc을 이용해서 넣을 건데 왜 DataFrame으로 변환하지 않은건지....
문제점을 알기 위해서는 먼저 loc을 알아보도록 하자!
df.loc[2]
df.loc을 하면 테이블의 입력한 행을 기준으로 데이터를 serise 형태로 출력해줍니다.
serise라고 하면 쉽게 말해서 1차원 배열!
열만 있는 테이블이라고 생각하면 쉽다!
t = df.loc[0]
t1 = pd.DataFrame(t)
t1
serise를 DataFrame으로 변환하는 건 쉬운데
위와 같이 변환을 하게 되면?!?
이건 내가 원한게 아닌데?....
이럴 때 행과 열을 바꿔줄 수 있는 numpy를 이용해보자!
import numpy as np
np.transpose(t1)
transpose를 해서 행열을 반전시켜주면?!? 끝!
DataFrame을 이용할 때 자주 loc을 사용하게 되는데
사용 시 항상 행열을 변환해주는 numpy에 들어있는 transpose를 잘 기억했다가 사용하는 걸 추천드립니다!
두번째는 list인데....
이건 모두 알다시피.....
자바에서는 해당 list.add를 해서 객체를 추가한다던지 등등
무튼 결국 list = 변수는 틀렸다.
그래서 list.append를 이용하여 추가해주면 끝!
tempering = []
count = 0
for i in df['cntrctCnclsMthdNm']:
if(df['cntrctCnclsMthdNm'][count] == '제한경쟁'):
tempering.append(df.loc[count])
# tempering = df.loc[count]
count += 1
else:
count += 1
continue
result = pd.DataFrame(tempering)
# result = np.transpose(result)
result
위의 코드처럼 수정을 하고 코드를 실행하면?!
아래처럼 내가 원하는 값만 찾을 수 있다.
여기서 중요한 건 기존 serise값을 DataFrame으로 변환할 때 transpose를 사용했는데
list에 추가하는 경우에는 사용하지 않아도 무관하다.
오히려 사용하면 행열이 반전되는 효과를 볼 수 있다.
오늘은 다른 코딩도 했으나 사실상 DataFrame을 활용해봤다.
다음에는 심화적인 부분이나 시각화쪽으로 포스팅을 해보겠습니다!
'Programing > Java & Spring' 카테고리의 다른 글
코딩 일기 : grid나 js파일이 정상 작동을 하지 않는다...(이론) (0) | 2020.12.03 |
---|---|
자투리 시간에 만드는 개인 포토폴리오 프로젝트! vo1 : 무료 Boot 다운받아서 파일 로드와 파일 설정하기! (0) | 2020.11.20 |
코딩 일기 : 파이썬에서 Run 실행 시 시작 시간을 알아보자![datetime] (0) | 2020.11.18 |
공공데이터포털의 데이터를 이용하여 json 파일을 만들어보자! ver2 [Json 만들기] (0) | 2020.11.17 |
공공데이터포털의 데이터를 이용하여 json 파일을 만들어보자! ver1 [공공데이터포털 이용하기] (0) | 2020.11.17 |