본문 바로가기
python3

파이썬(Python3)Pandas 핵심 기능들(2)

by DongGoo 2023. 1. 13.

1. 산술 연산과 데이터 정렬

서로 겹치는 index가 없을 경우 데이터는 NaN값이 된다. 산술 연산 시 누락된 값은 전파된다.

ex) NaN + 숫자 = NaN

NaN이 포함된 데이터를 연산하기 위한 방법으로 메서드를 사용하고 인자로 fill_value값을 전달하는 방법이 있다.

fill_value인자는 reindex를 사용할때도 사용할 수 있다.

df1 = pd.DataFrame(np.arange(9).reshape((3,3)), columns=list('bcd'),
                   index= ['ohio','texas','colorado'])

df1
Out[7]: 
          b  c  d
ohio      0  1  2
texas     3  4  5
colorado  6  7  8

df2 = pd.DataFrame(np.arange(12).reshape((4,3)), columns=list('bde'),
                   index= ['utah','ohio','texas','oraegon'])

df2
Out[9]: 
         b   d   e
utah     0   1   2
ohio     3   4   5
texas    6   7   8
oraegon  9  10  11

df1 + df2
Out[10]: 
            b   c     d   e
colorado  NaN NaN   NaN NaN
ohio      3.0 NaN   6.0 NaN
oraegon   NaN NaN   NaN NaN
texas     9.0 NaN  12.0 NaN
utah      NaN NaN   NaN NaN

메서드 사용을 통한 연산

df1 = pd.DataFrame(np.arange(9).reshape((3,3)), columns=list('abc'))
df2 = pd.DataFrame(np.arange(12).reshape((4,3)), columns=list('abc'))

df1
Out[26]: 
   a  b  c
0  0  1  2
1  3  4  5
2  6  7  8

df2
Out[27]: 
   a   b   c
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

# 일반 산술연산
df1 + df2
Out[28]: 
      a     b     c
0   0.0   2.0   4.0
1   6.0   8.0  10.0
2  12.0  14.0  16.0
3   NaN   NaN   NaN

# 메서드 사용 연산
df1.add(df2,fill_value = 0)
Out[29]: 
      a     b     c
0   0.0   2.0   4.0
1   6.0   8.0  10.0
2  12.0  14.0  16.0
3   9.0  10.0  11.0
메서드 설명
add, radd 덧셈(+)을 위한 메서드
sub, rsub 뺄셈(-)을 위한 메서드
div, rdiv 나눗셈(/)을 위한 메서드
floordiv, rfloordiv 소수점 내림(//)연산을 위한 메서드
pow, rpow 멱승(**)을 위한 메서드

Series와 DataFrame의 연산

브로드 캐스팅 : 2차원 배열에서 1차원 배열의 연산을 실행하게 되면 각 로우에 대해 한 번씩만 수행하게 된다.

df2 = pd.DataFrame(np.arange(12).reshape((4,3)), columns=list('abc'))
df2
Out[42]: 
   a   b   c
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

ser = df2.loc[0]
ser
Out[40]: 
a    0
b    1
c    2
Name: 0, dtype: int32

df2 - ser
Out[41]: 
   a  b  c
0  0  0  0
1  3  3  3
2  6  6  6
3  9  9  9

series의 색인과 dataframe의 컬럼이 맞지 않는다면 nan값으로 표시된다.

ser = pd.Series(range(3),index=['a','b','f'])
ser
Out[45]: 
a    0
b    1
f    2
dtype: int64

df2 - ser
Out[46]: 
     a    b   c   f
0  0.0  0.0 NaN NaN
1  3.0  3.0 NaN NaN
2  6.0  6.0 NaN NaN
3  9.0  9.0 NaN NaN

만약 row값에 대해 연산을 수행하고 싶다면 선슐 연산 메서드를 사용하면 된다.

df2
Out[47]: 
   a   b   c
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

ser1 = df2['c']
ser1
Out[49]: 
0     2
1     5
2     8
3    11
Name: c, dtype: int32

df2.sub(ser1,axis = 'index')
Out[50]: 
   a  b  c
0 -2 -1  0
1 -2 -1  0
2 -2 -1  0
3 -2 -1  0

2. 함수 적용과 매핑

배열의 각 원소에 적용되게 하는 메서드 적용하기