programing

특정 열에서 NaN이 있는 행을 선택하는 방법은 무엇입니까?

easyjava 2023. 6. 8. 22:43
반응형

특정 열에서 NaN이 있는 행을 선택하는 방법은 무엇입니까?

이 데이터 프레임이 주어지면 "Col2"가 다음과 같은 행만 선택하는 방법NaN?

df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)], columns=["Col1", "Col2", "Col3"])

다음과 같이 보입니다.

   0   1   2
0  0   1   2
1  0 NaN   0
2  0   0 NaN
3  0   1   2
4  0   1   2

결과는 다음과 같습니다.

   0   1   2
1  0 NaN   0

다음을 시도합니다.

df[df['Col2'].isnull()]

@qbzenker는 가장 관용적인 방법 IMO를 제공했습니다.

다음은 몇 가지 대안입니다.

In [28]: df.query('Col2 != Col2') # Using the fact that: np.nan != np.nan
Out[28]:
   Col1  Col2  Col3
1     0   NaN   0.0

In [29]: df[np.isnan(df.Col2)]
Out[29]:
   Col1  Col2  Col3
1     0   NaN   0.0

하나 이상의 NaN 값을 가진 행을 선택하려면 다음을 사용할 수 있습니다.isna+anyaxis=1:

df[df.isna().any(axis=1)]

특정 개수의 NaN 값이 있는 행을 선택하려면 다음을 사용할 수 있습니다.isna+sumaxis=1+gt예를 들어, 다음은 적어도 2개의 NaN 값을 가진 행을 가져옵니다.

df[df.isna().sum(axis=1)>1]

검사를 특정 열로 제한하려면 먼저 열을 선택한 다음 다음을 선택합니다.

df[df[['Col1', 'Col2']].isna().any(axis=1)]

모든 NaN 값을 가진 행을 선택하려면 다음을 사용할 수 있습니다.isna+allaxis=1:

df[df.isna().all(axis=1)]

NaN 값이 없는 행을 선택하려는 경우notna+allaxis=1:

df[df.notna().all(axis=1)]

이는 다음과 같습니다.

df[df['Col1'].notna() & df['Col2'].notna() & df['Col3'].notna()]

열이 많으면 지루해질 수 있습니다.대신, 당신은 사용할 수 있습니다.functools.reduce쇠사슬로 묶은&연산자:

import functools, operator
df[functools.reduce(operator.and_, (df[i].notna() for i in df.columns))]

또는numpy.logical_and.reduce:

import numpy as np
df[np.logical_and.reduce([df[i].notna() for i in df.columns])]

다음을 사용하여 일부 열에 NaN이 없는 행을 필터링합니다.query를 사용하면 그렇게 할 수 있습니다.engine='python'매개변수:

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

또는 그것을 사용합니다.NaN!=NaN@MaxU처럼 - UA에 대한 전쟁을 중지합니다.

df.query('Col2==Col2')

언급URL : https://stackoverflow.com/questions/43831539/how-to-select-rows-with-nan-in-particular-column

반응형