Chapter 5. Pandas 시작하기 (2)

2022. 3. 1. 22:42개인활동/파이썬 라이브러리를 활용한 데이터 분석

핵심기능

> reindex <

  • 재색인: 새로운 색인에 맞도록 객체를 새로 생성
obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj

  • 위의 series 객체에 대해 reindex를 호출하면 데이터를 새로운 index에 맞춰 재배열하고, 결측치는 NaN으로 표기함
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2

  • 시계열같은 연속형 데이터를 재색인 할 때 값을 보가하거나 채워야 하는 경우 method 옵션을 이용해 해결
  • ffill 메소드 등을 이용해 누락된 값을 직전값으로 채워넣을 수 있음
obj3 = pd.Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
obj3

obj3.reindex(range(6), method='ffill')

  • reindex를 통해 low, col 모두 변경 가능 → 순서만 전달하면 low가 재색인됨
frame = pd.DataFrame(np.arange(9).reshape((3, 3)),
					index=['a', 'c', 'd'],
					columns=['Ohio', 'Texas', 'California'])
frame

frame2 = frame.reindex(['a', 'b', 'c', 'd'])
frame2

  • col은 columns 예약어를 이용해 재색인
states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states)

  • loc를 이용한 재색인
frame.loc[['a', 'b', 'c', 'd'], states]
  • reindex 파라미터
index index로 사용할 새로운 순서, Index 인스턴스나 다른 순차적인 자료구조가 사용 가능, Index는 복사가 이루어지지 않고 그대로 사용
method 채움 메소드. ffill은 직전 값을 채워넣고 bfill은 다음 값을 채워넣음
fill_value 재색인 과정 중 새롭게 나타나는 비어있는 데이터를 채우기 위한 값
limit 전후 보간 시에 사용할 최대 갭 크기(채워넣을 원소의 수)
tolerance 전후 보간 시에 사용할 최대 갭 크기(값의 차이)
level multiindex의 단계에 단순 색인을 맞춤. 그렇지 않은 경우 multiindex의 하위 집합에 맞춤
copy 참인 겨우 새로운 index가 이전의 index와 동일하더라도 데이터를 복사. 거짓인 경우 동일할 때 복사하지 않음

> 하나의 low나 col 삭제 <

  • drop method를 이용해 선택한 값들을 삭제하기
obj = pd.Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])
obj

new_obj = obj.drop('c')
new_obj

obj.drop(['d', 'c'])

  • DF에서는 low와 col 모두 삭제 가능
  • drop의 파라미터로 low 이름을 리스트에 넣어주면 해당 low를 모두 삭제함
  • column의 경우 axis=1 또는 axis=’columns’를 파라미터로 넣어주면 col을 삭제함
data = pd.DataFrame(np.arange(16).reshape((4, 4)),
				index=['Ohio', 'Colorado', 'Utah', 'New York'],
				columns=['one', 'two', 'three', 'four'])

data.drop('two', axis=1)

  • drop 함수처럼 Series와 DataFrame의 크기나 형태를 변경하는 함수는 새로운 객체를 반환하는 대신 원본 객체를 변형함
  • inplace 옵션은 버려지는 값을 모두 삭제해버림
obj.drop('c', inplace=True)
obj

> 인덱싱, 선택하기, 거르기 <

  • Series의 index는 numpy 배열의 index와 유사하게 동작하지만 정수가 아니어도 된다는 특징이 있음
obj = pd.Series(np.arange(4.), index=['a', 'b', 'c', 'd'])
obj

obj['b']  # 1.0
obj[1]  # 1.0
  • 라벨 이름으로 슬라이싱을 하는 경우 시작점과 끝점을 포함함
obj['b':'c']

  • 슬라이싱 문법으로 선택된 영역에 값을 대입하는 것은 그대로 대입됨
  • index로 DF에서 하나 이상의 col값을 가져올 수 있음
data = pd.DataFrame(np.arange(16).reshape((4, 4)),
					index=['Ohio', 'Colorado', 'Utah', 'New York'],
					columns=['one', 'two', 'three', 'four'])

data

data[['three', 'one']]

  • 불리안이나 슬라이싱으로도 low를 선택할 수 있음
data[:2]
data[data['three'] > 5]

  • loc: 축이름으로 선택할 때 이용
  • iloc: 정수 index로 선택할 때 이용
data.loc['Colorado', ['two', 'three']]

data.iloc[2, [3, 0, 1]]

  • 슬라이싱, 단일라벨, 라벨리스트도 지원