Major Release !! Pandas 1.0.0

import pandas as pd로 우리에게 익숙한 Pandas. 데이터 분석을 위한 라이브러리라는 사실을 모르는 사람은 거의 없을 것이다. 하지만 부끄럽게도 나는 판다스의 버전조차 모른 상태로 여태껏 공식 문서와 Stackoverflow를 통해서만 사용하고 있었다. 마침 1월 9일 Pandas 1.0.0이 배포되었고, 이번 기회에 1.0.0에서 평소 자주 썼던 부분들을 위주로 중요한 업데이트들을 훑어보고 정리해보고자 한다.


dataframe.info() 깔끔해진 DataFrame summary

DataFrame 요약 기능이 조금 보기 좋은 형태로 개선되었다.

다음과 같은 예제 DataFrame이 있다고 할 때,

df = pd.DataFrame({
		'A': [1,2,3], 
		'B': ["goodbye", "cruel", "world"], 
		'C': [False, True, False]
})

df.info()

결과물 출력 비교

pandas 0.x.x

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
A    3 non-null int64
B    3 non-null object
C    3 non-null bool
dtypes: bool(1), int64(1), object(1)
memory usage: 179.0+ bytes

pandas 1.0.0

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   A       3 non-null      int64
 1   B       3 non-null      object
 2   C       3 non-null      object
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes

 

.to_markdown() : DataFrame을 Markdown 형식으로

DataFrame을 바로 Markdown 형식으로 출력할 수 있게 되었다. 문서화 작업을 할 때 항상 markdown table generator 같은 도구를 썼었는데, 매우 반갑고 편리한 기능!

df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b'])
print(df.to_markdown())
|    |   A |   B |
|:---|----:|----:|
| a  |   1 |   1 |
| a  |   2 |   2 |
| b  |   3 |   3 |

 

ingore_index : index reset 파라미터 추가

기존에는 정렬이나 중복값 제거 후 .reset_index(drop=True)를 추가적으로 해줘야 했으나, ignore_index 파라미터를 통해 index를 리셋할 수 있게 되었다. default는 False. 다음 기능들에서 찾아볼 수 있다.

  • .sort_values()
  • .sort_index()
  • .drop_duplicates()

 

pd.NA : 새로운 missing value의 실험

기존에 Pandas에서 missing value를 처리할 때는 np.nan이나 None이라는 싱글턴이 사용되었다. 그러나 data type이 float일 때는 np.nan , object일 경우에는 np.nan이나 None, datetime일 경우에는 np.NaT가 사용된다. 데이터타입마다 Null 데이터의 표현이 각기 달랐기 때문에, pd.NA는 datatype이 각기 달라도 missing data를 통일되게 표현할 수 있기 위해 도입되었다. 현재는 pd.NA는 data type 중 integer, boolean, 그리고 새로 도입된 string에서 사용 가능하다. pd.NA 값은 <NA>로 리턴된다. 실험적으로 도입했다고 하니, 지켜보면 좋을 듯.

 

string : 새로운 data type 도입

기존에는 object 이라는 data type으로 뭉뚱그려진 느낌이 있었으나, string 이라고 따로 지정할 수 있게 됨으로서 EDA나 wrangling 측면에서 더욱 편해질 것 같다. (pd.NA도 확인 가능함)

pd.Series(['abc', None, 'def'], dtype=pd.StringDtype())
0     abc
1    <NA>
2     def
Length: 3, dtype: string

 

bool : missing value 표현 가능

기존에 boolean은 True / False 만 표기가 가능했으나, Pandas 1.0.0 에서는 missing value도 가능하다. (pd.NA도 가능함)

pd.Series([True, False, None], dtype=pd.BooleanDtype())
0     True
1    False
2     <NA>
Length: 3, dtype: boolean

 


Reference

https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html