Data Science/Pandas

[Pandas] 데이터 처리 (1) - 데이터프레임 만들기

Boxya 2025. 3. 29. 23:22

[KT] AIVLE SCHOOL 3일차

 

데이터프레임

  • 데이터를 처리, 조회, 분석하는 가장 효율적인 방법이 데이터프레임을 사용하는 것
  • 일반적으로 접하게 되는 테이블 또는 엑셀 형태
  • 직접 만들 수 이쓰나 보통은 csv 파일, 엑셀 파일 또는 DB에서 읽어옴
  • 데이터 분석에서 가장 중요한 데이터 구조
  • 형태
    • 데이터프레임은 인덱스(=행 이름)와 열 이름이 있고 없고에 따라 다른 형태를 가짐
    • 인덱스란 행을 특정지어 조회할 때, 열 이름은 열을 특정지어 조회할 때 사용하는 정보

데이터프레임 생성

  • 데이터프레임을 다루기 위해서는 Pandas 라이브러리를 불러와야 함
    # pandas 라이브러리를 불러오고 pd로 별칭 지정
    import pandas as pd
  •  pd.DataFrame() 함수를 사용해 데이터프레임을 만들 수 있음
    # 리스트 만들기
    stock = [[94500, 92100, 92200, 92300],
             [96500, 93200, 95900, 94300],
             [93400, 91900, 93400, 92100],
             [94200, 92100, 94100, 92400],
             [94500, 92500, 94300, 92600]]
    dates = ['2019-02-15', '2019-02-16', '2019-02-17', '2019-02-18', '2019-02-19']
    names = ['High', 'Low', 'Open', 'Close']
    
    # 데이터프레임 만들기
    df = pd.DataFrame(stock, index=dates, columns=names)
    
    # 확인
    df.head()
  • 대부분 리스트, 딕셔너리, Numpy 배열로부터 데이터프레임을 생성
    • 딕셔너리로 데이터프레임을 만들면 딕셔너리의 키가 열 이름이 됨
    • 인덱스를 지정하지 않으면 행 번호가 인덱스가 됨
  • adereh데이터프레임을 만들기 위해서는 데이터, 열 이름, 인덱스 이름이 필요함
    • 데이터프레임을 만들 때 열 이름을 직접 지정하거나 나중에 변경할 수 있음
    • 열 이름을 지정하지 않으면 열 번호에 기반한 정수가 열 이름이 됨
    • 인덱스 이름을 지정하지 않으면 행 번호에 기반한 정수가 인덱스 이름이 됨
    • 의미 있는 값(대표적으로 날짜)이 인덱스가 되면 분석이 용이

CSV 파일 읽어오기

  • CSV 파일을 읽어와 데이터프레임을 만드는 경우가 가장 일반적임
  • pandas의 read_csv() 함수를 이용해서 csv 파일의 데이터를 읽어옴
  • read_csv() 함수의 주요 옵션
    • sep : 구분자 지정(기본값 = 콤마)
    • header : 헤더가 될 행 번호 지정(기본값 = 0)
    • index_col : 인덱스 열 지정(기본값 = False)
    • names : 열 이름으로 사용할 문자열 리스트
    • skiprows : 처음 몇 줄을 무시할 것인지 지정, 리스트로 지정 가능
    • encoding : 인코딩 방식을 지정 (한글이 포함된 파일을 읽을 때 encoding='CP949'로 지정)

인덱스 설정

  • 파일을 읽어올 때 인덱스 열을 지정할 수 있음
  • 인덱스 열을 지정하 지 않으면 행 번호에 기반한 정수가 인덱스로 설정됨
  • 필요한 경우 일반 열을 인덱스 열로 지정하거나, 행 순서에 기반한 정수값 인덱스로 초기화 할 수 있음
  • set_index()
    • 파일을 불러온 후에 set_index() 메서드를 사용해 인덱스가 될 열을 설정할 수 있음
    • e.g. pop.set_index('year', inplace=True)
      • 'year' 열을 인덱스로 설정, inplace=True는 원본객체에 반영한다는 뜻, 지정하지 않으면 반영 X
  • 불필요한 인덱스 이름 삭제 : (데이터프레임).index.name = None / e.g. pop.index.name = None
  • reset_index()
    • 행 번호에 기반한 정수 값으로 인덱스 초기화
    • drop = True를 설정하면 기존 인덱스 열을 버림
    • drop = False를 설정하면 기존 인덱스 열을 일반 열로 유지함(기본값)
    • e.g. pop.reset_index(drop=False, inplace=True) / 인덱스를 초기화, 기존 인덱스 열을 일반 열로 유지
  • 열 이름 변경 : pop.rename(columns={'index': 'year'},inplace=True) / pop 데이터프레임의 'index'열을 'year'로 이름 변경