TIL - pandas (Part 2)

MinWoo Park·2021년 2월 27일
0

TIL

목록 보기
17/49
post-thumbnail

Today I Learned

매일 배운 것을 정리하며 기록합니다.
Pandas의 데이터 입출력에 대해서 공부하였습니다.


1. 외부 파일 읽어오기

판다스는 다양한 형태의 외부 파일을 읽어와서 데이터프레임으로 변환하는 함수 제공
판다스 객체인 데이터프레임은 판다스의 모든 함수와 기능을 사용 가능

1-1. CSV(comma-separated values) - read_csv()

  • 쉼표로 열을 구분하고 줄바꿈으로 행을 구분
  • CSV 파일 -> 데이터프레임 : pandas.read_csv("파일 경로(이름)")
  • CSV뿐만 아니라 어떤 필드 구분 문자(Delimeter) 기반의 파일 포맷도 DataFrame으로 변환 가능, 인자로 sep에 해당하는 구분 문자를 입력하면 됨
  • header 옵션으로 열 이름으로 사용할 행 지정
    ex)
    header=0 (기본 값: 0행을 열 지정)
    header=1 (1행을 열 지정)
    header=None (행을 열 지정하지 않음)
  • index_col 옵션으로 행 인덱스가 되는 열 지정
    ex)
    index_col=Fasle (기본값, 인덱스 지정하지 않음)
    index='c0' ('c0'열을 인덱스로 지정)
import pandas as pd

file_path = './read_csv_sample.csv'

df1 = pd.read_csv(file_path)
print(df1)
#    c0   c1   c2   c3
# 0   0    1    4    7
# 1   1    2    5    8
# 2   2    3    6    9
print('\n')

df2 = pd.read_csv(file_path, header=None)
print(df2)
#     0    1    2    3
# 0  c0   c1   c2   c3
# 1   0    1    4    7
# 2   1    2    5    8
# 3   2    3    6    9
print('\n')

df3 = pd.read_csv(file_path, index_col=None)
print(df3)
#    c0   c1   c2   c3
# 0   0    1    4    7
# 1   1    2    5    8
# 2   2    3    6    9
print('\n')

df4 = pd.read_csv(file_path, index_col='c0')
print(df4)
#      c1   c2   c3
# c0
# 0     1    4    7
# 1     2    5    8
# 2     3    6    9

1-2. Excel - read_excel()

  • Excel 파일의 행과 열은 데이터프레임의 행, 열에 일대일 대응
  • Excel 파일 -> 데이터프레임: pandas.read_excel("파일 경로(이름)")

1-3. JSON - read_json()

  • JSON 파일은 데이터 공유를 목적으로 개발된 특수한 파일 형식
  • JSON 파일 -> 데이터프레임: pandas.read_json("파일 경로(이름)")

2.웹(web)에서 가져오기

2-1. HTML 웹 페이지에서 표 속성 가져오기 - read_html

  • HTML 웹 페이지에 있는 table 태그에서 표 형식의 데이터를 모두 찾아서 데이터프레임으로 변환
  • 표 데이터들은 각각 별도의 데이터프레임으로 변환되기 때문에 리스트로 반환됨
  • HTML 표 속성 읽기: pandas.read_html( "웹 주소(URL)" 또는 "HTML 파일 경로(이름)" )

2-2. 웹 스크래핑(scraping)

  • 스크래핑한 내용을 파이썬 리스트, 딕셔너리 등으로 정리한 뒤 DataFrame() 함수에 넣어 변환함

3. API 활용하여 데이터 수집하기


4. 데이터 저장하기

4-1 . CSV 파일로 저장 - to_csv()

  • CSV 파일로 저장: DataFrame 객체.to_csv("파일 이름(경로)")
  • 데이터프레임은 2차원 배열로 구조화된 데이터이기 때문에 2차원 구조를 갖는 CSV 파일로 변환 가능
import pandas as pd

# 판다스 DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
data = {'name': ['Jerry', 'Riah', 'Paul'],
        'algol': ["A", "A+", "B"],
        'basic': ["C", "B", "B+"],
        'c++': ["B+", "C", "C+"],
        }

df = pd.DataFrame(data)
df.set_index('name', inplace=True)  # name 열을 인덱스로 지정
print(df)
#       algol basic c++
# name
# Jerry     A     C  B+
# Riah     A+     B   C
# Paul      B    B+  C+

#! to_csv() 메소드를 사용하여 CSV 파일로 내보내기. 파열명은 df_sample.csv로 저장
df.to_csv("./df_sample.csv")
# df_sample.csv 파일
# name,algol,basic,c++
# Jerry,A,C,B+
# Riah,A+,B,C
# Paul,B,B+,C+
  • df.to_csv("./df_sample.csv")를 통해 만든 df_sample.csv 파일

4-2. JSON 파일로 저장 - to_json()

  • JSON 파일로 저장: DataFrame 객체.to_json("파일 이름(경로)")

4-3. Excel 파일로 저장 - to_excel()

  • Excel 파일로 저장: DataFrame 객체.to_excel("파일 이름(경로)")

4-4. 여러 개의 데이터프레임을 하나의 Excel 파일로 저장 - ExcelWriter()

  • Excel 워크북 객체 생성: pandas.ExcelWriter("파일 경로(경로)")
  • 삽입하려는 워크북 객체와 시트 위치 지정: DataFrame 객체.to_excel(워크북 객체, sheete_name="시트 이름")
# -*- coding: utf-8 -*-

import pandas as pd

# 판다스 DataFrame() 함수로 데이터프레임 변환. 변수 df1, df2에 저장
data1 = {'name': ['Jerry', 'Riah', 'Paul'],
         'algol': ["A", "A+", "B"],
         'basic': ["C", "B", "B+"],
         'c++': ["B+", "C", "C+"]}

data2 = {'c0': [1, 2, 3],
         'c1': [4, 5, 6],
         'c2': [7, 8, 9],
         'c3': [10, 11, 12],
         'c4': [13, 14, 15]}

df1 = pd.DataFrame(data1)
df1.set_index('name', inplace=True)  # name 열을 인덱스로 지정
print(df1)
print('\n')
#       algol basic c++
# name
# Jerry     A     C  B+
# Riah     A+     B   C
# Paul      B    B+  C+

df2 = pd.DataFrame(data2)
df2.set_index('c0', inplace=True)  # c0 열을 인덱스로 지정
print(df2)
#     c1  c2  c3  c4
# c0
# 1    4   7  10  13
# 2    5   8  11  14
# 3    6   9  12  15

# df1을 'sheet1'으로, df2를 'sheet2'로 저장 (엑셀파일명은 "df_excelwriter.xlsx")
writer = pd.ExcelWriter("./df_excelwriter.xlsx")
df1.to_excel(writer, sheet_name="sheet1")
df2.to_excel(writer, sheet_name="sheet2")
writer.save()
  • sheet 1

  • sheet 2


Reference : 오승환, 『파이썬 머신러닝 판다스 데이터 분석』, 정보문화사 (2019), p058-080.

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글