새소식

AI 개발

[Pandas] pandas 꿀팁(?)

  • -

 

 

 

1. None은 == 로 필터링 되지 않는다.

 

 

 

df[df["City"] == None] // X
df[df["City"].isnull()] // O
df[df["City"].isna()] // O

 

pandas를 사용할 경우 결측값은 None이 아닌 np.nan 을 이용한다.

 

 

 

2. 결측값과 isna, isnull

pandas에서 결측값(missing value)를 확인하는 메소드는 .isna()와 .isnull()이 있고 결측값일 경우 True라고 표시된다.

이 경우에도

df[df["City"] == np.nan] // X

으로 잡히지 않는다. 왜냐하면

 

np.nan == np.nan // False

NaN 끼리는 비교 연산자가 먹히지 않기 때문이다.

 

그리고 isnull()과 isna()의 차이점은 '없다'

공식 문서에서는 isnull이 isna의 별칭이라고 하고

DB에서는 보통 결측치를 null로 표기해서 na보다 null이 익숙한 사용자를 위해 isnull을 사용할 수 있도록 만들어 놓은 것이라고 한다.

 

df[df["City"].notna()]

결측 값이 아닌 것만 뽑으려면 .notna()를 사용한다.

 

df.query('City.notna()', engine='python')

또는 .query를 이용할 수 있다.

 

 

 

 

3. to_csv한 csv파일을 read_csv로 불러왔을 때 dtype이 달라지는 경우

 

큰 데이터를 read_csv 할 때 dtype이 이상해지거나 데이터 프레임 모양이 이상해지는 경우가 있었다.

user_id 컬럼에 갑자기 게시글 데이터가 들어가 있다거나.. to_csv  할 때 확인을 했음에도 read_csv 하면 이상해졌다.

버그인가..? 검색해도 잘 나오지 않았따.

컬럼이 이상해진지도 모르고 쭉 코드 돌리다가 결과가 너무 이상해서 다시 살펴봐서 알았다. 휴..

이제부터 전체 데이터 타입이 동일한지도 잘 확인해봐야겠다.

 

데이터를 처리했을 경우 데이터가 잘 보존되어있는지 확인 체크 해야한다.

이거를 뭔가 바로바로 할 수 있는 방법이 없는지.. 다른 사람들은 어떻게 할까 궁금해졌다.

 

노트북 내에서 스코프내 변수 값들을 확인해볼 수는 있지만 

로우가 몇천개 이상 넘어가면 일일히 확인해볼 수 없다..


https://www.python2.net/questions-859999.htm

https://github.com/pandas-dev/pandas/issues/27749

 

답변을 보니까 csv 모듈의 QUOTE_NONUMERIC, QUOTE_NONE 등을 사용하라고 하는데,

to_pickle로 하니깐 동일하게 로드되고 동일하게 저장됐다.

 

import pickle

// 저장시
with open('경로명') as f:
	pickle.dump(df, f)

// or

df.to_pickle('경로명')


// 로드시
with open('경로명') as f:
	df = pickle.load(f)

// or

df = pd.read_pickle('경로명')

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.