Pandas 데이터 프레임에서 NaN 값을 포함하는 열을 찾는 방법


144

가능한 NaN 값을 포함하는 팬더 데이터 프레임이 여기 저기 흩어져 있습니다.

질문 : NaN 값이 포함 된 열을 어떻게 확인합니까? 특히 NaN을 포함하는 열 이름 목록을 얻을 수 있습니까?


5
df.isna().any()[lambda x: x]나를 위해 작동
matanster

답변:


249

업데이트 : Pandas 0.22.0 사용

최신 Pandas 버전에는 새로운 메소드 'DataFrame.isna ()''DataFrame.notna ()'가 있습니다.

In [71]: df
Out[71]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [72]: df.isna().any()
Out[72]:
a     True
b     True
c    False
dtype: bool

열 목록으로 :

In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']

해당 열을 선택하려면 (적어도 하나의 NaN값 포함) :

In [73]: df.loc[:, df.isna().any()]
Out[73]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

이전 답변 :

isnull ()을 사용해보십시오 :

In [97]: df
Out[97]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [98]: pd.isnull(df).sum() > 0
Out[98]:
a     True
b     True
c    False
dtype: bool

또는 @root가 더 명확한 버전을 제안한 것처럼 :

In [5]: df.isnull().any()
Out[5]:
a     True
b     True
c    False
dtype: bool

In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']

하위 집합을 선택하려면-하나 이상의 NaN값을 포함하는 모든 열 :

In [31]: df.loc[:, df.isnull().any()]
Out[31]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

답변 주셔서 감사합니다! 열 이름 목록을 얻으려고합니다 (그에 따라 질문을 업데이트했습니다). 어떻게 알고 있습니까?
denvar

null 값 대신 특정 값을 가진 모든 열을 선택하는 좋은 방법을 알고 있습니까?
gregorio099

1
신경 쓰지 마! null 대신 값을 검색하려면 .isnull ()을 .isin ([ 'xxx'])으로 바꾸십시오.df.columns[df.isin['xxx'].any()].tolist()
gregorio099

@ gregorio099, 나는 이렇게 할 것입니다 :df.columns[df.eq(search_for_value).any()].tolist()
MaxU

1
좋은 대답, 이미 공표했습니다. 아이디어 - 새로운 기능을 추가 할 수 있습니다 isna, notna ?
jezrael

26

사용할 수 있습니다 df.isnull().sum(). 각 열의 모든 열과 총 NaN이 표시됩니다.


8

화면에서 시각적으로 검사하기 위해 많은 열이 있어야하는 문제가 있었으므로 문제가되는 열을 필터링하고 반환하는 짧은 목록 구성 요소는 다음과 같습니다.

nan_cols = [i for i in df.columns if df[i].isnull().any()]

그것이 누군가에게 도움이된다면


4

많은 수의 열이있는 데이터 집합에서 null 값을 포함하는 열 수와 그렇지 않은 열 수를 확인하는 것이 좋습니다.

print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))

print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))

print("Total no. of columns in the dataframe")
print(len(df.columns))

예를 들어 내 데이터 프레임에는 82 개의 열이 있었고 그 중 19 개에는 적어도 하나의 null 값이 포함되었습니다.

또한 null 값이 더 많은 열에 따라 열과 행을 자동으로 제거 할 수도 있습니다
. 지능적으로 수행하는 코드는 다음과 같습니다.

df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)

참고 : 위의 코드는 모든 null 값을 제거합니다. 널값을 원하면 이전에 처리하십시오.


2

이 세 줄의 코드를 사용하여 하나 이상의 null 값을 포함하는 열 이름을 인쇄합니다.

for column in dataframe:
    if dataframe[column].isnull().any():
       print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))

2

이 두 가지 모두 작동해야합니다.

df.isnull().sum()
df.isna().sum()

DataFrame 메서드 isna()또는 isnull()완전히 동일합니다.

참고 : 빈 문자열 ''은 False로 간주됩니다 (NA로 간주되지 않음)


1

이것은 나를 위해 일했다.

1. null 값이 1 이상인 열을 가져옵니다. (열 이름)

data.columns[data.isnull().any()]

2. 적어도 1 개의 null 값을 가진 개수로 열을 가져 오는 경우.

data[data.columns[data.isnull().any()]].isnull().sum()

[선택 사항] 3. null 개수의 백분율을 가져옵니다.

data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]

여러 가지 접근법에 감사드립니다!
Mike Rapadas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.