본문 바로가기
Python/Pandas

데이터 추출(array, to_numpy, values)-pandas(8)

by 콩돌 2019. 10. 17.
반응형

파이썬 버전 3.7 기준

pandas 버전 0.25.1 기준



 Series에서의 배열 데이터 추출


본 포스팅에서는 DataFrame이나 Series의 데이터에 접근하거나 추출할 수 있는 array, to_numpy, values 메서드들에 대해 알아본다.

그리고 본 포스팅에서 다루는 메서드들은 Series에 적용이 가능하며, 일부 메서드는 DataFrame에도 적용이 가능하다.


  ○ Series 적용 가능 메서드array, to_numpy, values 

  ○ DataFrame 적용 가능 메서드: to_numpy, values 



 Series.array 메서드


만약 사용자가 Series나 배열 데이터만 추출하고싶다면 array 메서드를 이용하면 된다.

이 메서드는 ExtensionArray 객체를 반환한다. 

  ○ ExtensionArray 객체는 panda에서 지원하는 확장 가능한 배열 객체이다. 


인덱스를 제거한 배열을 이용해 데이터 연산을 수행하는 것은 경우에 따라 매우 유용할 때가 있다.

  ○ pandas에서는 Series끼리 연산할 때 자동적으로 같은 레이블을 가지는 데이터들을 매칭시키는데 이를 무시하고 순서대로 연산을 수행할때 이것이 유용하다.


이 메서드는 DataFrame 객체에는 존재하지 않는다.


array 메서드 사용 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# array 사용 예

In[4]: ex_s=pd.Series([0,1,2,3,4])


In[5]: ex_arr=ex_s.array

In[6]: ex_arr

Out[6]: 

<PandasArray>

[0, 1, 2, 3, 4]

Length: 5, dtype: int64



 .to_numpy() 메서드


이 메서드는 pandas 객체를 numpy 배열 객체인 ndarray로 반환한다.

Series가 ndarray-like이지만 ndarray가 아니므로 실제 ndarray가 필요한 상황이 있을 수 있다.

이런 경우에는 to_numpy() 메서드를 사용하면 된다.


이 메서드는 DataFrame과 Series 두 객체에 존재하므로 사용 가능하다.


to_numpy() 메서드 사용 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# to_numpy() 사용 예

In[4]: ex_s=pd.Series([0,1,2,3,4])


In[7]: ex_s.to_numpy()

Out[8]: array([0, 1, 2, 3, 4], dtype=int64)



 .to_numpy(self, dtype=None, copy=False)

이 객체의 입력변수의 상세 사항은 다음과 같다. 


dtype: dtype

반환되는 ndarray에 설정할 dtype을 입력받는다.


copy: bool

반환되는 값이 다른 배열에 대한 뷰(view)가 아닌지 확인한다. 

copy=False는 to_numpy()가 복사본이 아니다라는 것은 보증하지는 않는다. 

하지만, copy=True는 꼭 필요한 것은 아니지만 복사본이 되도록 한다.




 .values 메서드


배열을 반환하는 메서드중 하나이다.

dtype에 따라 ndarray 혹은 ndarray-like를 반환한다.

아래에 설명하겠지만 어떤 자료형을 반환할지 명확하지가 않으므로 사용하는것이 지양하도록 한다.


이 메서드는 DataFrame과 Series 두 객체에 존재하므로 사용 가능하다.


values() 메서드 사용 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# to_numpy() 사용 예

In[4]: ex_s=pd.Series([0,1,2,3,4])


In[9]: ex_val=ex_s.values

In[10]: ex_val

Out[10]: array([0, 1, 2, 3, 4], dtype=int64)

 


※ 주의사항

  과거에는 데이터를 추출할 때 Series.values 혹은 DataFrame.values 사용을 권했다.

  사용자는 여전히 온라인이나 오래된 코드에서 이런 예제를 찾을 수 있다.

  현재에는 .values 메서드를 사용하는 것을 지양하도록 하고, .array 혹은 .to_numpy() 메서드를 사용하는 것을 권장하고 있다.


  .values는 다음과 같은 문제점을 안고있다. 

    (1) 사용자의 Series가 extension type을 보유하고 있을때, Series.values가 Numpy 배열과 extension array중 무엇을 반환할지 불확실하다.

    (2) DataFrame이 혼합된 dtype을 가지고 있을 경우, DataFrame.values는 복사본 데이터과 강제적으로 값을 공통적인 dtype에 포함시킨다. 이는 상대적으로 과도한 연산을 수행하게 만든다. DataFrame.to_numpy() 메서드는 반환되는 Numpy 배열이 DataFrame 안에서 같은 데이터에 대한 view가 아님을 명확하게 해준다.




 

 

 

 

 참고자료

  https://pandas.pydata.org/pandas-docs/stable/getting_started/dsintro.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.array.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.to_numpy.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.values.html  

 

 

 

 



반응형

댓글