본문 바로가기
pandas

Excel 파일 다루기

by 자동매매 2023. 12. 11.

참조 :

한 권으로 끝내는 <판다스 노트>

https://e-koreatech.step.or.kr/

 

 

from IPython.display import Image
import numpy as np
import pandas as pd
import seaborn as sns


# 실습용 데이터셋(서울시대중교통) 다운로드
!pip install opendata-kr -q
from opendata import dataset
dataset.download('서울시대중교통')

# 유가정보 데이터 다운로드
dataset.download('유가정보')

gas1 = pd.read_csv('data/gas_first_2019.csv', encoding='euc-kr')

# titanic 데이터셋 로딩
df = sns.load_dataset('titanic')

# warning 무시
warnings.filterwarnings('ignore')

# e notation 표현 방식 변경
pd.options.display.float_format = '{:.2f}'.format

# 모든 컬럼 표시
pd.set_option('display.max_columns', None)

 

1. 엑셀 파일 읽기

pandas.read_excel(
    io,             # 파일위치
    sheet_name=0,   # 기본: 첫번째 sheet 불러옴
    *,
    header=0, 
    names=None, 
    index_col=None, 
    usecols=None, 
    dtype=None, 
    engine=None,    # 읽기 실패시 - openpyxl 적용
    converters=None, 
    true_values=None, 
    false_values=None, 
    skiprows=None, 
    nrows=None, 
    na_values=None, 
    keep_default_na=True, 
    na_filter=True, 
    verbose=False, 
    parse_dates=False, 
    date_parser=_NoDefault.no_default, 
    date_format=None, 
    thousands=None, 
    decimal='.', 
    comment=None, 
    skipfooter=0, 
    storage_options=None, 
    dtype_backend=_NoDefault.no_default, 
    engine_kwargs=None
    )

 

 

1) 기본 명령어 : 첫번째 sheet읽기

df = pd.read_excel(
    r"C:\dev\pandas\data\서울시대중교통\seoul_transportation.xlsx",
    engine="openpyxl"
    )
    
df
	대중교통구분	노선명	년월	승차총승객수
0	지하철	1호선	201711	8633618
1	지하철	1호선	201712	8737235
2	지하철	1호선	201801	8145989
3	지하철	1호선	201802	7273309
4	지하철	1호선	201803	8692551

 

 

2)  모든 sheet를 dict로 읽기 :  sheet_name=None

key -> sheet명, value -> DataFrame

dic = pd.read_excel(
    r"C:\dev\pandas\data\서울시대중교통\seoul_transportation.xlsx",
    sheet_name = None,
    engine="openpyxl"
    )

 

dic.keys()    # dict_keys(['철도', '버스'])

 

dic['철도'].head()
대중교통구분	노선명	년월	승차총승객수
0	지하철	1호선	201711	8633618
1	지하철	1호선	201712	8737235
2	지하철	1호선	201801	8145989
3	지하철	1호선	201802	7273309
4	지하철	1호선	201803	8692551

 

2. 엑셀 파일 저장

# index=False  : 엑셀파일의 A열에  index를 저장함
# sheet_name = '시트이름'     :미지정시 - 'Sheet1'
dic['철도'].to_excel('test.xlsx')  # 기본 index = False

 

 

3. 일보 파일 정리하기

import pandas as pd
import numpy as np
from pprint import pprint
from MyModule.base_func import listdir
import datetime

path = "E://종합운영일지//2023년//0. hmi_일보//나주"
list_dir = listdir(path)
SheetName = "일보"

column_name_start_row = 5
column_name_range = 3
data_value_start_row = 32
data_value_range = 4

row_interval = 37

columns_count = 16

rotate = 7


# column 정리
full_name = path + "//" + list_dir[0]
df = pd.read_excel(full_name, sheet_name=SheetName)
df_target = pd.DataFrame([])

for i in range(rotate):
    df1 = df.iloc[
        (row_interval * i + column_name_start_row) : (
            row_interval * i + column_name_start_row
        )
        + column_name_range,
        :columns_count,
    ]
    df1.index = [ii for ii in range(column_name_range)]
    df1.columns = [iiii for iiii in range(columns_count * i, columns_count * (i + 1))]
    df_target = pd.concat([df_target, df1], axis=1)

# value 정리
for j in range(len(list_dir)):
    full_name = path + "//" + list_dir[j]
    df = pd.read_excel(full_name, sheet_name=SheetName)
    df_target1 = pd.DataFrame([])

    for i in range(rotate):
        df1 = df.iloc[
            (row_interval * i + data_value_start_row) : (
                row_interval * i + data_value_start_row
            )
            + data_value_range,
            :columns_count,
        ]
        date_conv = pd.to_datetime(list_dir[j].split(".")[0])
        df1.index = [date_conv - datetime.timedelta(1) for ii in range(data_value_range)]
        df1.columns = [
            iiii for iiii in range(columns_count * i, columns_count * (i + 1))
        ]
        df_target1 = pd.concat([df_target1, df1], axis=1)
    df_target = pd.concat([df_target, df_target1], axis=0)


df_target.to_excel("일보정리.xlsx")

 

나주.Zip
11.31MB

 

 

[ result ]

일보정리.xlsx
1.27MB

 

 

 

4. 여러 개의 DataFrame 저장하기 : ExcelWriter 함수

     여러 개의 엑셀 시트를 갖는 엑셀 파일을 생성

      1) pandas.ExcelWriter( ) 객체를 생성

      2) to_excel( ) 함수를 이용하여 시트를 추가

      3) save 함수를 이용하여 저장

     

     pandas.ExcelWriter(path_or_buf)

 

 

 

5. CSV 파일 읽기

pandas.read_csv(filepath, header, index_col, names)

  • filepath: 가져올 csv 파일의 위치
  • header: 헤더의 열이름으로 사용할 행 또는 열 지정
  • index_col: DataFrame의 행 인덱스가 되는 열 지정
  • names: 열이름으로 지정할 문자열

 

'pandas' 카테고리의 다른 글

데이터 전처리, 추가, 삭제, 변환  (0) 2023.12.12
복사와 결측치  (0) 2023.12.12
통계  (0) 2023.12.11
조회, 정렬, 조건필터  (0) 2023.12.11
pandas 기본  (0) 2023.11.30

댓글