Pandas Library 기초

Pandas Library란?

데이터 조작 및 분석을 위해 Python 프로그래밍 언어로 작성된 소프트웨어 라이브러리로,
3가지 객체( series, dataframe, index) 를 가진다.

1. series

index와 값으로 구성되어 있으며, index 속성으로 접근이 가능하다.

  • 벡터와 대응
  • 1차원 배열

series는 다음과 같이 두가지 방법으로 만들 수 있다.

# 방법 1 (배열)
import pandas as pd
data1 = pd.Series([0.25, 0.5, 0.75, 1.0], index = ['a', 'b', 'c', 'd'])
data2 = pd.Series([0.25, 0.5, 0.75, 1.0], index = [2, 3, 5, 7])
# 방법 2 (dictionary) - key가 index 역할 
price_dict = {'apple': 20000,
              'banana': 10000,
              'pineapple': 9000,
              'strawberry': 9000,
              'cherry': 17000}
price = pd.Series(price_dict)

2. dataframe

머신러닝 모델 학습을 위한 학습 데이터의 기본적인 데이터 구조로, 인덱스열이름을 가지는 2차원 배열이라고 볼 수 있다.

  • 여러개의 series로 구성
  • 행렬과 대응
  • 다차원 배열
  • 행 = record = instance
  • 열 = 특징 = 속성 = column

dataframe은 다음과 같이 세가지 방법으로 만들 수 있다.

# 방법 1) pd.DataFrame(series, columns)
data = [{'a': i, 'b': 2*i} for i in range(3)]
pd.DataFrame(data)

# 여러 series의 결합 (방법1)
validity_dict = {'apple': '2021-11-30',
                'banana': '2021-10-30',
                'pineapple': '2021-10-20',
                'strawberry': '2021-10-21',
                'cherry': '2021-10-22',}
validity = pd.Series(validity_dict)

fruit = pd.DataFrame({'price': price, 'validity': validity})
fruit
# 방법 2) pd.DataFrame(dictionary list)
data = [{'a': 1, 'b':2}, {'b': 3, 'c':4}]
pd.DataFrame(data)
# 방법 3) pd.DataFrame(numpy array, columns, index)
import numpy as np

pd.DataFrame(np.random.rand(3,2), 
             columns =['foo', 'bar'],
            index = ['a', 'b', 'c'])

3. Index

  • 불변의 배열(요소의 추가, 수정 및 삭제가 불가능한 배열)이나 정렬된 집합과 같이 작동
  • 배열에서 제공하는 인덱싱, 슬라이승 가능
ind = pd.Index([2,3,5,7,11])
ind[1] # 인덱싱
ind[::2] # 슬라이싱
ind[1] = 0 # Type error 발생 (요소 변경 불가)

indA = pd.Index([1,3,5,7,9])
indB = pd.Index([2,3,5,7,11])
indA & indB # 집합 연산 가능 (교집합)
indA | indB # 집합 연산 가능 (합집합)
# key를 이용한 데이터 인덱싱
data = pd.Series([0.25, 0.5, 0.75, 1.0], index = ['a', 'b', 'c', 'd'])
'a' in data # 'a'가 data에 들어있는지 확인
data.keys() # data의 key(index) 가져오기
list(data.items()) # data의 key-value 가져오기 (data.items() x)
data['e'] = 1.25 # 값 추가
data['d'] = 9.9999 # 값 치환
# key를 이용한 데이터 슬라이싱
data['a':'c'] # explicit한 인덱스 사용 
data[0:3] # implicit한 인덱스 사용
data[(data>0.3) & (data<0.8)]
data[['a', 'e']] # 팬시 인덱싱

4. DataFrame 인덱싱 & 슬라이싱

  • loc indexer (location based indexer): 명시적인 인덱스(index 객체의 값을 활용)
  • iloc indexer (integer-location based indexer): 암묵적인 인덱스(index 객체의 값과 무관한 record의 순서)를 활용한 인덱서
  • DataFrame은 or 속성로 접근 가능
    1. data['column'] ex) data['price'] (추천방식)
    2. data.column ex) data.price
  • 인덱싱은 열을 참조, 슬라이싱은 행을 참조

dataframe 생성

area = pd.Series([423967, 170312, 149995, 141297, 695662], 
                 index = ['California', 'Florida', 'Illinois', 'New York', 'Texas'])
pop = pd.Series([38332521, 19552860, 12882135, 19651127, 26448193],
                index = ['California', 'Florida', 'Illinois', 'New York', 'Texas'])

df = pd.DataFrame({'area':area, 'pop':pop})
df['density'] = df['pop']/df['area']
df

행단위 인덱싱

# 행단위 인덱싱을 할 때는 인덱서를 꼭 사용해야함. 
df['California'] # 잘못된 방식
df.loc['California'] # 올바른 방식
df.iloc[0]
# 팬시 인덱싱
ind1 = ['Florida', 'Texas']
df.loc[ind1]
df.iloc[[1,4]] 

열단위 인덱싱

# 열단위 인덱싱은 인덱서를 활용하지 않고 특징 이름을 활용. 
df.loc['pop'] # 잘못된 방식
df['pop'] # 올바른 방식 
type(df['pop']) # 결과는 series
# 팬시 인덱싱
ind2 = ['pop', 'area']
df[ind2]

행단위 슬라이싱

df.loc['Florida':'Texas']
df['Florida':'Texas'] # 인덱서 생략가능

열단위 슬라이싱

# dataframe의 column 인덱스 객체를 활용
df[df.columns[1:]]
# dataframe의 암묵적 idnex를 활용 
df.iloc[:,1:]
# 팬시 인덱싱
ind4 = df['density']>=100
df[ind4]

ind5 = df['area']>=150000
df[ind4 & ind5] 

5. 결측치 처리

NaN (Not a Number)

  • sum(), max(), mun() 등의 집계 연산을 해도 오류가 발생하지 않음
  • float64 type

None

  • sum(), max(), mun() 등의 집계 연산 시 오류 발생

Null값 연산

isnull(): 누락 값을 가리키는 bool mask 생성
notnull(): isnull()의 반대인 bool mask 생성
dropna(): 누락 값을 제거한 데이터 반환

df.dropna(axis=0) # nan을 포함하는 행을 삭제
df.dropna(axis=1) # nan을 포함하는 열을 삭제

fillna(x): 누락 값을 x로 채운 데이터 사본을 반환

df.fillna(method = 'ffill') # 이전값으로 채우기
df.fillna(method = 'bfill') # 다음값으로 채우기

6. 중복 Data 처리

drop_duplicates(): Pandas 데이터프레임에 포함된 중복 데이터 확인 및 처리를 위한 메서드

drop_duplicates(subset = None, 
		keep = ‘first’, 
		inplace = False, 
		ignore_index = False)
df[df.duplicated(keep = False)] # 중복 데이터 '확인'
df.drop_duplicates() # 중복 데이터 '삭제' 
df.drop_duplicates(subset = [‘brand’]) # brand특징 중복 데이터 삭제

7. DataFrame 결합

concat 함수

  • pd.concat([df1, df2])
  • series 또는 dataframe을 결합하는데 사용
  • default: 행 단위 결합 (수직)
  • np.concatenate()과 달리 인덱스가 유지 됨
    => 해결 방법 : pd.concat([df1, df2], ignore_index=True)

merge 함수

  • 키 열 이름이 같은 경우: on 키워드 사용
pd.merge(df1, df2, on = ['employee'])


  • 키 열 이름이 다른 경우: left_on & right_on 키워드 사용
# employee(=name) 으로 결합
pd.merge(df1, df3, left_on = 'employee', right_on='name')


  • 인덱스 이름이 같은 경우: left_index & right_index 키워드 사용
pd.merge(df1, df3, left_index=True, right_index=True)

좋은 웹페이지 즐겨찾기