본문 바로가기
Python/Pandas

데이터셋활용 누락값 채우기, 데이터 조합-pandas(27)

by 콩돌 2020. 4. 21.
반응형

파이썬 버전 3.7 기준

pandas 버전 1.0.3 기준

 데이터셋활용 누락값 채우기, 데이터 조합


본 포스팅에서는 pandas에서 제공하는 combine_first()메서드를 활용한 누락데이터를 채우는 방법과, combine메서드를 활용하여 데이터를 조합하는 방법에 대해 다루도록 한다.



 데이터셋활용 누락값 채우기, 데이터 조합

 

 누락데이터 채우는 combine_first() 메서드

두 개의 데이터가 존재할때 하나의 데이터의 퀄리티가 더 좋은 반면 누락값(missing value)이 많고, 다른 하나의 데이터는 퀄리티가 떨어지지만 누락값이 적은 경우가 있다.

이런 경우에 퀄리티가 더 좋은 데이터의 누락값에 다른 데이터로 채우고싶을 경우가 있을 수 있다.

이런경우 combine_first() 메서드를 활용하면 된다.

 

위의 경우 외에도 누락값이 많이 존재하는 데이터에 대해 그 누락값에 다른 데이터셋에 있는 값들을 입력하고 싶은 경우가 있다면 언제든 활용이 가능하다.


메서드 사용 형식)

result= object1.combine_first(object2)


위의 메서드 사용 형식을 참고하여 해당 메서드의 거동을 설명하자면, object1에서 누락값이 존재할 경우 동일 위치에 존재하는 object2의 값을 채워넣는다.

다음 예제는 combine_first() 메서드를 활용하는 예제이다.


combine_first() 메서드 사용 예제)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 예제용 배열 선언

In[4]: high_qual=pd.DataFrame([[1.34,np.nan,3.12],[np.nan,5.45,np.nan],[7.32,np.nan,9.11]])

In[5]: low_qual=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])


In[6]: high_qual

Out[6]: 

      0     1     2

0  1.34   NaN  3.12

1   NaN  5.45   NaN

2  7.32   NaN  9.11


In[7]: low_qual

Out[7]: 

   0  1  2

0  1  2  3

1  4  5  6

2  7  8  9


# 메서드 사용 예제

In[8]: high_qual.combine_first(low_qual)

Out[8]: 

      0     1     2

0  1.34  2.00  3.12

1  4.00  5.45  6.00

2  7.32  8.00  9.11



 두개의 데이터셋을 조합하는 combine() 메서드

위의 combine_first() 메서드보다는 더욱 일반적인 DataFrame.combine() 메서드가 있다.

이 메서드는 두 데이터 프레임을 조합하는 메서드로, 함수를 사용하여 자유도 높게 조합을 수행할 수 있다.

 

※ DataFrame객체와 Series 객체에 combine() 메서드 적용시 차이점?

  DataFrame객체에 대해 조합을 진행할 때, 요소대 요소를 비교하여 조합을 수행하는 것이 아니라 열대열로 비교를 하여 조합을 수행하므로 사용하는데 주의가 필요하다.

  반대로 Series 객체에 대해 조합을 진행할 때에는, 요소대 요소를 비교하여 조합을 수행한다.

 

연산 메서드 사용 형식)

result= object1.combine(object2, func)


object1과 object2는 조합을 수행하는 객체들이다.

func는 조합을 수행할때 활용하는 함수이다.


다음은 combine() 메서드의 사용하는 예제이다.


combine() 메서드 사용 예제)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 예제용 배열 및 함수 선언

In[9]: ex_df1=pd.DataFrame(np.arange(9).reshape(3,3))

In[10]: ex_df2=pd.DataFrame(np.ones((3,3))*5)

In[11]: ex_df2.iloc[0,2]=None

In[12]: ex_func= lambda s1, s2: s1 if s1.sum()>=s2.sum() else s2


In[13]: ex_df1

Out[13]: 

   0  1  2

0  0  1  2

1  3  4  5

2  6  7  8

In[14]: ex_df2

Out[14]: 

     0    1    2

0  5.0  5.0  NaN

1  5.0  5.0  5.0

2  5.0  5.0  5.0


# combine() 메서드 사용 예제1(numpy기능 이용)

In[15]: ex_df1.combine(ex_df2, np.maximum)

Out[15]: 

   0  1    2

0  5  5  NaN

1  5  5  5.0

2  6  7  8.0

In[16]: ex_df1.combine(ex_df2, np.minimum, fill_value=999)

Out[16]: 

   0  1  2

0  0  1  2

1  3  4  5

2  5  5  5


# combine() 메서드 사용 예제2(사용자 지정 함수 이용)

In[17]: ex_df1.combine(ex_df2, ex_func)

Out[17]: 

   0  1  2

0  5  5  2

1  5  5  5

2  5  5  8

In[18]: ex_df1.combine(ex_df2, ex_func, fill_value=999)

Out[18]: 

   0  1    2

0  5  5  999

1  5  5    5

2  5  5    5



 메서드 상세사항


combine_first() 메서드에 대해서는 특별한 옵션이 존재하지 않으므로 combine() 메서드의 상세옵션에 대해서만 다루도록 한다.


 object.combine(self, other: 'DataFrame', func, fill_value=None, overwrite=True)


other: DataFrame, Series or scalar

DataFrame 객체의 경우, 조합을 수행할 DataFrame을 입력받는다.

Series 객체의 경우, 조합을 수행할 Series 혹은 scalar를 입력받는다.


func: function 

객체 조합에 활용할 함수를 입력받는다.

  ○ DataFrame의 경우, 이 함수에 입력으로 각 열인 Series를 입력받는다.

  ○ Series의 경우, 이 함수에 입력으로 각 요소를 입력받는다. 


fill_value: scalar

만약 데이터 내에 누락데이터가 존재할 경우 fill_value 데이터로 대체한다.

기본값은 None이다.


overwrite: bool

True일경우 열이 other에 입력되는 객체에 조합하려는 열이 존재하지 않는 경우 NaN데이터로 해당 열을 채운다.

기본값은 True이다.



 

 

 

 

 참고자료

  https://pandas.pydata.org/docs/getting_started/basics.html

  https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.combine.html

 

 

 

 

 

반응형

댓글