[KR] Pandas 1.0.0 Major Release ! 바뀐 점을 알아봅시다

SEO, Wonyoung
6 min readJan 26, 2020

--

Pandas major release. Now it’s giant.

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

Pandas logo from https://github.com/pandas-dev/pandas

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


df.info()
<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 |

ignore_index: index reset 파라미터 추가

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

  • .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 이라고 Z따로 지정할 수 있게 됨으로서 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

글을 마치며

이 밖에도 Major release를 통해 업데이트 된 사항이 아주 많다고 합니다. 이번 글에서는 자주 쓰는 기능, 편리할 것이라 예상되는 기능 위주로 소개를 드렸지만, 더 궁금한 사항이 있으신 경우 아래의 공식 문서를 통해 찾아보시는 것을 추천 드립니다.

본 글은 제 기술 블로그에 포스팅한 글을 옮긴 것입니다. 더욱 다양한 주제와 포스트는 https://lucaseo.github.io/ 를 방문해주세요 !

--

--