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