Chapter 5. Pandas 시작하기 (3)

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

핵심 기능

> 정수 index <

  • 판다스는 일관성을 유지하기 위해 정숫값을 담고 있는 축 index가 있다면 우선적으로 라벨을 먼저 찾아보도록 구현되어있음
  • 라벨에 대해서는 loc 인덱서를, 정수 index에 대해서는 iloc인덱서를 사용
ser = pd.Series(np.arange(3.))

ser.loc[:1]

ser.iloc[:1]

> 산술연산과 데이터 정렬 <

  • 다른 색인을 가지고 있는 객체간의 산술 연산의 경우 짝이 맞지 않는다면 결과에 두 색인이 통합됨
  • 서로겹치는 색인이 없는 경우 데이터는 NA
s1 = pd.Series([7.3, -2.5, 3.4, 1.5], index=['a', 'c', 'd', 'e'])

s2 = pd.Series([-2.1, 3.6, -1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g'])

s1+s2

df1 = pd.DataFrame(np.arange(9.0).reshape((3, 3)), columns=list('bcd'),
                    index=['Ohio', 'Texas', 'Colorado'])
df2 = pd.DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'),
                   index=['Utah', 'Ohio', 'Texas', 'Oregon'])

df1+df2

df1 = pd.DataFrame({'A' : [1, 2]})
df2 = pd.DataFrame({'B' : [3, 4]})

df1-df2

  • 존재하지 않는 축의 값을 특수한 값으로 지정하려는 경우
df1 = pd.DataFrame(np.arange(12.).reshape((3, 4)),
                   columns=list('abcd'))
df2 = pd.DataFrame(np.arange(20.).reshape((4, 5)),
                   columns=list('abcde'))

df2.loc[1, 'b'] = np.nan

df1+df2

# add method 이용하여 na값 채우기
df1.add(df2, fill_value=0)

  • DF - Series
    • 각 low에 대해 한번씩 계산을 수행 = 브로드캐스팅
arr = np.arange(12.).reshape(3, 4)

arr - arr[0]

frame = pd.DataFrame(np.arange(12.).reshape((4, 3)),
                     columns=list('bde'),
                     index=['Utah', 'Ohio', 'Texas', 'Oregon'])
series = frame.iloc[0]

frame
series

frame-series

  • Series의 색인을 DF의 col에 맞춰 아래 low로 전파
  • 연산 메소드의 파라미터인 axis의 값을 ‘index’나 0으로 설정하는 경우 DF의 low를 따라 연산하라는 의미
  • index값을 Data Frame의 column이나 Series의 색인에서 찾을 수 없다면 그 객체는 형식을 맞추기 위해 재색인 됨

 

 

series2 = pd.Series(range(3), index=['b', 'e', 'f'])
frame+series2

> 함수 적용과 매핑 <

  • pandas 객체에도 numpy의 유니버설 함수(배열의 각 원소에 적용되는 메서드)를 적용할 수 있음
frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'),
					index=['Utah', 'Ohio', 'Texas', 'Oregon'])
frame

np.abs(frame)  # 절댓값 메서드

  • 각 column이나 low의 1차원 배열에 함수를 적용하는 연산
f = lambda x : x.max() - x.min()
frame.apply(f)

  • 함수 f는 Series의 최댓값과 최솟값의 차이를 계산하는 함수로 각 column에 대해 한번만 수행되며 결괏값은 계산을 적용한 column을 index로 가지는 Series를 반환
    • apply 메서드는 행이나 열에 대해 함수를 적용할 수 있도록 해주는 메서드
  • apply 함수에 axis=’columns’ 아규먼트를 넘기면 각 로우에 대해 한번씩 수행
frame.apply(f, axis='columns')

  • 배열에 대한 일반적인 통계 메서드(sum이나 mean같은)는 Data Frame의 메서드로 존재하기 때문에 apply 메서드를 이용할 필요가 없음
  • apply 메서드에 전달된 함수는 스칼라 값을 반환 할 필요가 없음
    • 여러 값을 가진 series를 반환해도 됨
def f(x):
	return pd.Series([x.min(), x.max()], index=['min', 'max'])

frame.apply(f)

  • 배열의 각 원소에 적용되는 메서드 사용 가능
    • applymap 메서드를 이용해 frame 객체에서 실숫값을 문자열 포맷으로 변환하기
    format = lambda x : '%.2f' %x
    frame.applymap(format)
    


  • Series는 각 원소에 적용할 함수를 지정하기 위한 map 메서드를 가짐
frame['e'].map(format)