Pandas 연산 (Operations)




1) DataFrame 만들기

예제

import pandas as pd
import numpy as np

np.random.seed(0)

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20130102', periods=6))
df['F'] = s1
df.loc[:, 'D'] = np.array([5.0] * len(df))

print(df)
                   A         B         C    D    F
2013-01-01  1.764052  0.400157  0.978738  5.0  NaN
2013-01-02  1.867558 -0.977278  0.950088  5.0  1.0
2013-01-03 -0.103219  0.410599  0.144044  5.0  2.0
2013-01-04  0.761038  0.121675  0.443863  5.0  3.0
2013-01-05  1.494079 -0.205158  0.313068  5.0  4.0
2013-01-06 -2.552990  0.653619  0.864436  5.0  5.0

간단한 DataFrame을 하나 만들었습니다.


Pandas 연산 (Operations)



2) 통계적 분석

예제1

print(df.mean())
A    0.244411
B    0.000576
C    0.615706
D    5.000000
F    3.000000
dtype: float64

일반적으로 연산에는 누락된 데이터가 제외됩니다.

mean()을 사용하면 열에 따라 평균값을 얻습니다.



예제2

print(df.mean(1))
2013-01-01    1.494684
2013-01-02    1.568074
2013-01-03    1.490285
2013-01-04    1.865315
2013-01-05    2.120398
2013-01-06    1.793013
Freq: D, dtype: float64

mean(1)은 행 방향의 평균값을 반환합니다.

서로 다른 차원를 갖는 객체들 간의 연산은 정렬이 필요합니다.

또한 pandas는 지정한 차원을 따라 자동으로 브로드캐스트 (broadcast)합니다.



예제3

s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)

print(s)
print(df.sub(s, axis='index'))
2013-01-01    NaN
2013-01-02    NaN
2013-01-03    1.0
2013-01-04    3.0
2013-01-05    5.0
2013-01-06    NaN
Freq: D, dtype: float64

                   A         B         C    D    F
2013-01-01       NaN       NaN       NaN  NaN  NaN
2013-01-02       NaN       NaN       NaN  NaN  NaN
2013-01-03 -1.103219 -0.589401 -0.855956  4.0  1.0
2013-01-04 -2.238962 -2.878325 -2.556137  2.0  0.0
2013-01-05 -3.505921 -5.205158 -4.686932  0.0 -1.0
2013-01-06       NaN       NaN       NaN  NaN  NaN

Series를 하나 만들었습니다.

shift() 메서드는 지정한 숫자만큼 인덱스를 이동합니다.

df.sub(s, axis=’index’)연산은 DataFrame에서 Series에 해당하는 값을 뺍니다.

Series의 1, 2, 6번째 값이 존재하지 않기 때문에 DataFrame의 값들도 NaN이 됩니다.




3) 함수 적용하기

예제

print(df.apply(np.cumsum))
                   A         B         C     D     F
2013-01-01  1.764052  0.400157  0.978738   5.0   NaN
2013-01-02  3.631610 -0.577121  1.928826  10.0   1.0
2013-01-03  3.528391 -0.166522  2.072870  15.0   3.0
2013-01-04  4.289429 -0.044847  2.516733  20.0   6.0
2013-01-05  5.783508 -0.250005  2.829801  25.0  10.0
2013-01-06  3.230518  0.403613  3.694237  30.0  15.0

apply() 메서드는 DataFrame의 지정한 축을 따라 특정 함수를 적용하도록 합니다.

np.cumsum을 입력하면 누적 합을 계산합니다.




4) 히스토그램

예제1

s = pd.Series(np.random.randint(0, 7, size=10))

print(s)
0    4
1    2
2    0
3    0
4    4
5    5
6    5
7    6
8    0
9    4
dtype: int64

np.random.randint()를 사용해서 10개의 임의의 정수 Series를 갖는 Series를 하나 만들었습니다.



예제2

print(s.value_counts())
4    3
0    3
5    2
6    1
2    1
dtype: int64

value_counts()Series에서 특정 값이 몇 개 포함되어 있는지 보여줍니다.

4와 0이 3개, 5가 2개, 6과 2가 1개씩 포함되어 있음을 알 수 있습니다.

(Histogramming and Discretization 페이지 참고)




5) 문자열 메서드

예제

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])

print(s.str.lower())
0       a
1       b
2       c
3    aaba
4    baca
5     NaN
6    caba
7     dog
8     cat
dtype: object

Series는 str 속성 안에 문자열 처리 메서드를 갖고 있어서 어레이의 각 요소에 대해 작업하기 쉽습니다.

s.str.lower()Series s의 문자열을 소문자로 변환해서 반환합니다.

(Vectorized String Methods 페이지 참고)



이전글/다음글