Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

여유로움

[11.22 월] 빅데이터 분석기사 실기 - Pandas (17~20강) 본문

셀프스터디/빅데이터 분석기사

[11.22 월] 빅데이터 분석기사 실기 - Pandas (17~20강)

티로즈 2021. 11. 22. 22:29

1. 사용 라이브러리 import

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

2. 파일 준비하기

  • data_day_2016.xlsx, data_day_2017.xlsx, data_day_2018.xlsx, data_day_2019.xlsx 파일을 가져와 df로 합치기작업
  • 각 파일에 기록되어 있는 내용
    • 측정일시, 측정소명, 이산화질소농도, 오존농도, 이산화탄소농도, 아황산가스, 미세먼지, 초미세먼지의 측정치
# [3-1] './data_01/data_day_2016.xlsx' 파일을 가져와 df2016이라는 이름을 부여합니다.
df2016 = pd.read_excel('./data_01/data_day_2016.xlsx')

[1번]
temp1 = pd.DataFrame({'A': [12],
                     'B': [34]})
temp2 = pd.DataFrame({'A': [56],
                     'B': [78]})
pd.concat([temp1, temp2])

[2번]
temp1 = pd.DataFrame({'A': [12],
                     'B': [34]})
temp2 = pd.DataFrame({'C': [56],
                     'D': [78]})
pd.concat([temp1, temp2], axis=1)

# [3-5] df2016, df2017, df2018, df2019를 합쳐 한 개의 DataFrame으로 만들어 df라는 이름을 지정합니다.
dfList = [df2016, df2017, df2018, df2019]
df = pd.concat(dfList, axis=0)
df
# df의 shape을 출력하여 전체 행, 열의 수를 확인합니다.
df.shape

[1번]          

  A B
0 1 3
1 2 4
0 5 7
1 6 8

[2번]

  A B C D
0 1 3 5 7
1 2 4 6 8

3. 파일 정리

  • 파일이름 목록을 가져오는 glob 모듈의 glob 함수를 사용함
  • 시험 대비용은 아님
    만일 파일이름을 정렬하고 싶다면 sorted() 함수를 사용합니다. 
import glob
glob.glob('data_01/data_day_*.xlsx')

sorted(glob.glob('data_01/data_day_*.xlsx'))

import glob
dfList = []
for x in sorted(glob.glob('data_01/data_day_*.xlsx')):
    temp = pd.read_excel(x)
    dfList.append(temp)

df = pd.concat(dfList, axis=0)   
df.shape

 

4. concat 후 인덱스가 맞지 않는 문제 해결

index, columns => 두 가지 방법 사용
1. 눈에 보이지 않는 integer 번호 (python에서의 index번호 개념) => 사용하고 싶음
2. 눈에 보이는 label (다양한 Index타입이 존재)

 
 
여러개 DataFrame을 합친 경우 index 번호를 RangeIndex로 새롭게 부여
  • pd.concat([df1, df2...], ignore_index=True)
  • DataFrame.index = pd.RangeIndex(len(df))
# [3-10] 해결방법 1 : index 번호 정리하면서 합치기
dfList = [df2016, df2017, df2018, df2019]
df2 = pd.concat(dfList, ignore_index=True)
df2.tail(3)

# [3-11] 해결방법 2 : index를 만들어 사용하기
df.index = pd.RangeIndex(len(df))
df.tail(3)

 

5. 날짜 타입변경

날짜, 시간 타입 변경 (youtube 분석에서 했었어요!)
# [3-14] df의 '측정일시'에 대해서 format='%Y%m%d'을 지정하여 데이터 타입을 datetime으로 변경합니다.
# 올바르게 변경되는 것을 확인할 수 있습니다.
pd.to_datetime(df['측정일시'], format='%Y%m%d')

 

6. insert 함수

DataFrame.insert(위치, 이름, 데이터)
# [3-15] df의 '측정일시'에 대해서 format='%Y%m%d'을 지정하여 데이터 타입을 datetime으로 변경한 뒤 
# '측정일시2' 컬럼을 '측정일시' 뒤에 삽입합니다
#df['측정일시2'] = pd.to_datetime(df['측정일시'], format='%Y%m%d')   # 뒤에 추가
df.insert(1'측정일시2', pd.to_datetime(df['측정일시'], format='%Y%m%d'))

 

7. accessor dt 함수

# [3-17] datetime 타입은 accessor - dt를 사용할 수 있습니다.
# df의 '측정일시2' 컬럼의 dt accessor를 사용하여 year 정보만 확인합니다.
df['측정일시2'].dt.year
# [3-20] df에 '년', '월', '일' 컬럼을 추가합니다.

df['년'] = df['측정일시2'].dt.year
df['월'] = df['측정일시2'].dt.month
df['일'] = df['측정일시2'].dt.day

df.head(2)

 

8. drop

DataFrame.drop([컬럼이름1, 컬럼이름2,...], axis=1)
  • 컬럼 삭제
  • 목록에 있는 컬럼이 삭제된 DataFrame을 반환
DataFrame.drop([행이름1, 행이름2, ...], axis=0)
  • 행 삭제
  • 목록에 있는 행이 삭제된 DataFrame을 반환
삭제할 컬럼 또는 행이 1개인 경우 목록이 아닌 한 개 이름만 지정할 수 있음
# [3-21] '측정일시2' 컬럼이 필요 없으므로 제거합니다.
# 컬럼을 제거하기 위해서는 drop 함수에서 axis=1 을 사용해야 합니다.
# 삭제된 DataFrame을 df2 이름을 지정합니다.
#df.drop('측정일시2', axis=1) <=> 동일한결과
df.drop(columns=['측정일시2'])
df

df2.to_csv('fine_dust.csv', index=False)

df2 = pd.read_csv('fine_dust.csv')
df2.head(2)

출처 : 유튜브 채널 EduAtoZ