Python/Pandas

[Pandas] 개요

yeonny_do 2023. 11. 10. 18:09

 

- 판다스는 데이터 조작 및 분석을 위해 파이썬 프로그래밍 언어로 작성된 소프트웨어 라이브러리임
- 일명 파이썬의 엑셀이라 불림
- 데이터 전처리에 주로 사용됨
- 시각화 연동되어지는 데이터 셋으로도 활용이 많이됨
- 참고 사이트  : https://pandas.pydata.org 

 


■ pandas 불러오기

 

- pandas 모듈 미설치 시 (anaconda jupyter 환경)

 
 !pip install pandas
 

 

- pandas 모듈 불러오기

 
 import pandas as pd
 

 

 

 


■ pandas 에서 사용하는 자료 구조

 

  □ Series 

- DataFrame 중에서 하나의 column(열 즉, 특성값) 에 해당하는 데이터
- 1차원 데이터 (index, value 2가지 요소로 구성)

 

  □ Dataframe 

- Data Table 전체를 의미하는 데이터
- 2차원 데이터(index, values, columns 3가지 요소로 구성)
- Series가 여러 개 모여서 결합된 것이라고 봐도 됨 (Series := column)

 

  □ Index

- Series, Dataframe의 인덱스를 구성하는 데이터

 

 

 


■ Series 

  : index값을 명시적으로 지정하지 않으면 0부터 시작하는 일련번호로 자동 지정됨

 

 
nums = [2,3,4,5,6]
sr = pd.Series(nums)
print(sr)
print(type(sr))
 

 

 


 

  ○ index를 직접 전달할 수도 있음. 인덱스를 전달할 때는 value의 개수에 맞게 전달해야 함

 
sr = pd.Series(nums, index = list('abcde'))  
print(sr)
 

 

 


 
menu = ['바나나','닭가슴살','그릭요거트']
index_list = ['아침','점심','저녁']

sr = pd.Series(menu, index=index_list)
print(sr)

print('-'*30)

print(sr.values)  # value 값만 출력
print(sr.index.values) # index 즉, 행의 이름 출력
print(type(sr.index.values))
 

 

 

※ object : 문자열

※ index와 values 의 클래스는 다차원 배열임 !

 


  ○ 딕셔너리를 이용한 Series 생성. key가 index가 되고, value가 column의 값이 됨

 
dic_data = {'a': 21, 'b': 22, 'c':23, 'd':24, 'e': 25}
sr = pd.Series(dic_data, dtype=np.float32)
print(sr)
 

  ※ Series 생성 시 dtype옵션으로 데이터의 타입을 정할 수 있음

 


  ○ 원소 선택 (인덱싱)

 
print(sr[0])
print(sr['a'])
print(sr['a':'c'])
print(sr[0:3])
 

 

 


 

○ unique(), value_counts()

- unique() : 결측치를 포함하며 중복된 데이터를 제외한 데이터의 종류를  ndarray로 반환
- value_counts() : 결측치를 포함하지 않으며 각 데이터 종류 별 개수를 Series로 반환

 

 
sr = pd.Series(['A','B','A',np.NaN,'C','D','A','D'])

print(sr.unique())
print(sr.value_counts())
print(sr.value_counts().index.values) # 결측치는 제외된 인덱스 값들
print(sr.value_counts()[3])
 

 

 

 


■ 데이터 프레임 (DataFrame)

  : 데이터 프레임 생성 시 index와 column을 지정해주지 않으면 자동으로 생성됨. 

 

   ○ display() : 데이터 프레임의 서식이 잘 정렬된 형태로 보여짐

 

 
nums = np.arange(1,10).reshape(3,3)
print(nums)
print('-'*30)

df = pd.DataFrame(nums)
print(df)
display(df)

 

 


 

  ○ 인덱스나 컬럼을 직접 전달할 수도 있음

 
menu = [['토스트','시리얼','스크램블'],
        ['갈비탕','해장국','순대국'],
        ['닭가슴살','구운계란','반숙란']]
index = ['아침','점심','저녁']
column = ['금','토','일']

df = pd.DataFrame(menu, index=index, columns=column)
display(df)
df = pd.DataFrame(menu, index, column) # 따로 옵션 지정해주지 않고, value, index, column 순으로 작성해도 됨
 

 


 
print(df.index)
print(df.index.values)
print('-'*30)

print(df.values)
print('-'*30)

print(df.columns)
print(df.columns.values)
 

 


○ 딕셔너리를 이용한 데이터 프레임 : 딕셔너리의 key가 column명이 됨. value는 이스트의 형태로 넣어줘야 함.

 
data ={
    '이름' : ['홍길동','전우치','손오공','사오정','저팔계'],
    '나이' : [32,27,30,31,33],
    '전화번호' : ['010-1111-1111','010-2222-1111','010-3333-1111','010-4444-1111','010-5555-1111']
}

df = pd.DataFrame(data, index = np.arange(1,6))
display(df)