[판다스] 데이터 프레임 개요와 생성

밍키·2020년 8월 12일
0

판다 판다 판다스

목록 보기
4/12

데이터 프레임 개요
데이터 프레임 생성, 저장, 그리고 읽어오기

1. DataFrame 개요


  • 판다스의 가장 핵심적인 클래스
  • 2차원 행렬 형태의 표를 다루는 Pandas 클래스
  • 데이터베이스의 Table이나 R의 data.frame이나 Excel의 표와 동일한 역할
    행이름: index 열이름: column
    • 이름을 명시적으로 지정할 수도 있다.
    • 지정하지 않으면 0부터 1씩 증가하는 값이 붙는다.
    • 하나의 행과 하나의 열은 Series로 구성된다.
  • 직접 데이터를 넣어 생성하거나 데이터 셋을 파일(csv, 엑셀 등)로 부터 읽어와 생성한다.
    • 표 형태 파일이라면 거의 다 불러올 수 있다.

2. DataFrame 생성


2.1 직접 생성


import pandas as pd
pd.DataFrame(data [, index=None, columns=None])
  • data
    • DataFrame을 구성할 값을 설정
      • Series, List, ndarray를 담은 다차원 배열
      • 열이름을 key로 컬럼의 값 value로 하는 딕션어리(사전)
    • index
      • index명으로 사용할 값 배열로 설정
    • columns
      • 컬럼명으로 사용할 값 배열로 설정

2.1.1 TODO

# 데이터프레임을 만드는 방법은 여러가지가 있다.

# 데이터프레임을 딕셔너리로 만들어보기
data = {
    'id':['id-1', 'id-2', 'id-3', 'id-4', 'id-5'],
    'korean':[100,50,70,60,90],
    'english':[90,80,100,50,100]
}
grade = pd.DataFrame(data)
grade

# 넘파이 2차원 배열로 만들어보기
data2 = np.arange(12).reshape(4,3)
arr_df = pd.DataFrame(data2)
arr_df
# 컬럼 이름, 인덱스 이름을 지정하지 않았기 때문에 자동으로 붙여줌.

# 인덱스 이름 지정해주기
arr_df = pd.DataFrame(data2, index=['가','나','다','라'], columns=['A','B','C'])
arr_df

3. DataFrame 저장


DataFrame객체.to_파일타입(파일경로,sep=',', index=True, header=True, encoding)

3.1 파라미터, 매개변수


  • 파일경로 : 저장할 파일경로(경로/파일명)
  • sep : 데이터 구분자
  • index, header : 인덱스/헤더 저장 여부
  • encoding
    • 파일인코딩
    • 생략시 운영체제 기본 encoding 방식
    • 지정해 주는 게 좋다. UTF-8 or cp949

3.2 저장 파일 종류


  • csv 파일로 저장
    • DataFrame객체.to_csv()
    • 텍스트 파일로 저장
  • 엑셀파일로 저장
    • DataFrame객체.to_excel(파일경로, index=True, header=True)
  • 피클 파일로 저장
    • DataFrame객체.to_pickle()

3.2.1 TODO

# 인덱스나 헤더가 순번이라면 굳이 저장할 필요 없다.
# 명시적으로 준 인덱스나 헤더라면 저장하는 것이 좋다.
# 나중에 인덱스로 바꿔주는 메서드가 있음.

# 파일로 저장해보자

# csv
grade.to_csv('./data/grade.csv') # 저장할 경로를 지정할 때 역슬러쉬 쓸 때는 두 개씩 써준다.

# 인덱스 없이 저장하기
grade.to_csv('./data/grade2.csv', index=False)
# 순번이라면, 자동증가값이라면, 인덱스 없이 저장하는 게 좋다.
# 저장하지 않는 경우가 많다.

# 헤더 없이 저장하기
grade.to_csv('./data/grade3.csv', index=False, header=False)
# 하지만 내가 지정해 준 값이라면 저장해주는 게 좋다.
# 일반적으로 헤더는 많이 저장한다.

# 인코딩 지정하기.
grade.to_csv('./data/grade.csv', encoding='UTF-8')
grade.to_csv('./data/grade2.csv', index=False, encoding='UTF-8')
grade.to_csv('./data/grade3.csv', index=False, header=False, encoding='UTF-8')
# 명시해주는 것이 좋다.
# 읽어들일 때도 인코딩을 지정해서 읽어줘야 한다.

# 엑셀로 저장하기
grade.to_excel('./data/grade.xlsx', index=False)

# 피클로 저장하기
grade.to_pickle('./data/grade.pkl')
# 피클은 그 형태 그대로 저장하고 그대로 불러오기 때문에 인덱스를 없애주지 않아도 된다.

# HTML로 저장하기
grade.to_html('./data/grade.html')
# html로 저장될 때는 테이블 태그로 저장된다.
# html로 저장할 일은 거의 없다.

# csv, 엑셀, 피클로 많이 저장한다.

4. DataFrame 읽어와서 생성


4.1 csv 파일 등 텍스트 파일로 부터 읽어와 생성


  • pd.read_csv(파일경로, sep=',', header, index_col, na_values, encoding)

    • 파일경로 : 읽어 올 파일의 경로
    • sep
      • 데이터 구분자.
      • 기본값: 쉼표
    • header=정수
      • 열이름(컬럼이름)으로 사용할 행 지정
      • 기본값 : 첫 번째 행
      • None 설정 : 첫번째 행부터 데이터로 사용하고 header(컬럼명)는 0부터 자동증가하는 값을 붙인다. header가 없을 때 사용.
    • index_col=정수,컬럼명
      • index 명으로 사용할 열이름(문자열)이나 열의 순번(정수)을 지정.
      • 생략시 0부터 자동증가하는 값을 붙인다.
    • na_values
      • 읽어올 데이터셋의 값 중 결측치로 처리할 문자열 지정.
      • 물음표 '?' 같은 것들
    • encoding
      • 파일 인코딩
      • 생략시 운영체제 기본 encoding 방식

4.1.1 TODO

# csv 파일 읽어오기
grade_df1 = pd.read_csv('data/grade.csv', encoding='UTF-8')
grade_df1
# 불러올 때 자동으로 인덱스가 붙는다.

# 인덱스로 쓸 때, 인덱스를 지정해줄 때
grade_df1 = pd.read_csv('data/grade.csv', index_col=0, encoding='UTF-8')
grade_df1
# 0번 컬럼이 인덱스가 된다.

# 인덱스 없이 저장한 파일 불러오기
grade_df2 = pd.read_csv('data/grade2.csv', encoding='UTF-8')
grade_df2

# 아이디를 인덱스로 
# grade_df2 = pd.read_csv('data/grade2.csv', index_col=0, encoding='UTF-8')
grade_df2 = pd.read_csv('data/grade2.csv', index_col='id', encoding='UTF-8')
# 컬럼 이름으로 지정해줄 수도 있음

# 헤더 없는 파일 읽어오기
grade_df3 = pd.read_csv('data/grade3.csv', encoding='UTF-8')
grade_df3
# 1번 행이 헤더로 지정됨

# 헤더없다고 알려주기
grade_df3 = pd.read_csv('data/grade3.csv', header=None, encoding='UTF-8')
grade_df3

# 엑셀파일 읽어오기
grade_df4 = pd.read_excel('data/grade.xlsx')
grade_df4

# 피클 불러오기
grade_df5 = pd.read_pickle('data/grade.pkl')
grade_df5
# 따로 인덱스가 붙지 않음. 그대로 불러옴

# html 읽어오기
# 리턴타입 : List
# 테이블이 있다면 URL을 지정해줄 수도 있음
# (URL의 HTML에 있는 모든 테이블을 다 가져와서 DataFrame 리스트로 반환.)
table = pd.read_html('data/grade.html')
table[0]
profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글