Pandas에서 특정 문자 열을 포함하도록 NaN 행 필터링

Nov 15 2020

다음과 같이 작은 데이터 세트가 제공됩니다.

   *id *building  floor_number *floor_name
0    1         A           8.0          5F
1    2         A           4.0          4F
2    3         A           NaN          3F
3    4         A           NaN         NaN
4    5         A           NaN         NaN
5    6         B          14.0         17F
6    7         B          13.0         16F
7    8         B          20.0       world
8    9         B          13.0       hello
9   10         B          13.0         16F

포함하는 *열 ( selected_col아래 참조)에 NaN값 이 있는지 확인하고 싶습니다 . 따라서 NaN행 필터링을위한 조건 코드를 작성해야합니다 selected_col.

selected_col = df.columns[df.columns.str.contains(pat = '^\*')]
...

다음과 같이 행을 필터링하려면 어떻게해야합니까? 감사.

   *id *building  floor_number *floor_name
3    4         A           NaN         NaN
4    5         A           NaN         NaN

편집 :NaN 포함 된 열에 대해 셀 을 강조 *표시해야하므로 (이 열에는 NaNs 가 없어야 함 ) np.where가능 하면 사용하고 싶습니다 .

np.where(conditions, None, 'contains NaNs for required columns')

참조 관련 : Python의 여러 조건을 기반으로 데이터 프레임 셀 강조 표시

답변

2 BENY Nov 16 2020 at 03:38

확인 filterany

out = df[df.filter(like='*').isna().any(1)]
Out[39]: 
   *id *building  floor_number *floor_name
3    4         A           NaN         NaN
4    5         A           NaN         NaN
1 RCvaram Nov 16 2020 at 03:43

더 좋은 방법은 BEEN_YO의 대답입니다. 또 다른 방법은 다음과 같이 할 수 있습니다.

  1. NaN값 을 확인하는 데 필요한 목록 압축을 사용하여 열을 필터링 합니다.
  2. isna()방법으로 확인
cols = [col for col in df.columns if '*' in col]
out = df[df[cols].isna().all(1)]