Computer Science

dataframe 에서 any() 와 any(1)의 차이점

Hiru_93 2022. 9. 26. 23:45

다음과 같은 데이터프레임을 생성한다고 해 보자.

 

# let's say we have a dataframe such as:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[0,1,2],
                   'B':[1,2,3],
                   'C':[2,3,4]})

column = ['C']
df.loc[1,'B'] = np.nan
df[column] = np.nan
df

출력하면 아래와 같이 나온다.

        A	B	C
0	0	1.0	NaN
1	1	NaN	NaN
2	2	3.0	NaN

여기서 A와 B칼럼에 대해서 결측치(NaN)값만 추출해 보자

sols = ['A','B']
df[sols].isnull().any()

any()로 할 경우 any(0)와 같기 때문에 칼럼 기준으로 결측치 여부를 판별한다

A    False
B     True
dtype: bool

any(1)로 할 경우 행(row)기준으로 결측치 여부를 판별한다

df[sols].isnull().any(1)
0    False
1     True
2    False
dtype: bool

any()를 쓸 경우 데이터량이 많을 때, 종종 칼럼만 출력되고 행은 출력이 되지 않는 현상으로 나타난다

cons = ['PC_SPOUSE', 'PC_PARENT','PC_CHILD','PC_SIBSHIP','PC_RELATIVE','PC_LOVER','PC_FRIEND']
condition = (new_df_D.EXCLUDE==2) & (new_df_D.PERSONCONCERNED==1) & (new_df_D[cons]==1).any()

new_df_D[condition]

위와 같은 코드를 썼을 때 빈 칼럼만 나오는 경우가 있다.

any(1) 로 고쳐주면 정상적으로 출력된다

	EXCLUDE	PERSONCONCERNED	PC_DK	PC_SPOUSE	PC_PARENT	PC_GRANDPARENT	PC_CHILD	PC_SIBSHIP	PC_RELATIVE	PC_LOVER	PC_FRIEND	PC_STRANGER	PC_ETC	PCETC_DTL	WARNSIGN_TP	WARNSPEAK_DK	WARNSPEAK1	TIME1	WARNSPEAK2	TIME2	WARNSPEAK3	TIME3	WARNSPEAK4	WARNSPEAK4DTL	TIME4	WARNBEHAV_DK	WARNBEHAV1	TIME5	WARNBEHAV2	TIME6	WARNBEHAV3	TIME7	WARNBEHAV4	WARNBEHAV4DTL	TIME8	WARNEMOTION_DK	WARNEMOTION1	TIME9	WARNEMOTION2	TIME10	WARNEMOTION3	TIME11	WARNEMOTION4	WARNEMOTION4DTL	TIME12	WARNSIGN_DTL	EVENT_DTL	EVENT_DTL_2
64259	2	1	NaN	2.0	2.0	2.0	2.0	2.0	2.0	2.0	1.0	2.0	2.0	NaN	88	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	변사자 신원이 확인되지 않아 관련 내용을 확인할 수 없었음.	1. 변사자 정보 : UNKNOWN_999999-1999999 2. 발견일시 : ****년 **월 **일 **:00 3. 시도(발견)장소 1) 수사기록 상 주소 주...	NaN
103782	2	1	NaN	2.0	2.0	2.0	2.0	2.0	2.0	2.0	1.0	2.0	2.0	NaN	88	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	변사자는 **년 전부터 ***의 ****와 동거하던 자로, 사망 당시 **세 정도의 연세이다. ****.*월 ...	NaN