programing

Panda 데이터 프레임에서 NaN 값이 들어 있는 열을 찾는 방법

sourcetip 2022. 10. 28. 23:10
반응형

Panda 데이터 프레임에서 NaN 값이 들어 있는 열을 찾는 방법

가능한 NaN 값이 포함된 팬더 데이터 프레임은 다음과 같습니다.

질문:NaN 값이 들어 있는 열을 확인하려면 어떻게 해야 합니까?특히 NaN이 포함된 컬럼명의 리스트를 받을 수 있을까요?

업데이트: Panda 0.22.0 사용

새로운 버전의 Panda에는 새로운 메서드 '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']

(적어도 1개 이상 포함) 열을 선택합니다.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

오래된 답변:

isull()을 사용해 보겠습니다.

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에서 제안한 clear version:

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

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

화면에서 육안으로 검사해야 하는 열이 많아 문제가 있는 열을 필터링하고 반환하는 쇼트리스트 컴포트는 다음과 같습니다.

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

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

게다가 임계값보다 많은 nan 값을 가지는 열을 필터링 하려면 , 예를 들면 85% 를 사용해 주세요.

nan_cols85 = [i for i in df.columns if df[i].isnull().sum() > 0.85*len(data)]

이건 나한테 효과가 있었어

1. 최소 1개의 null 값을 가진 Columns를 가져옵니다.(열 이름)

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]

데이터 집합의 열 수가 많은 경우 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개는 최소 1개의 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 값을 삭제합니다.null 값을 원할 경우 미리 처리하십시오.

df.columns[df.isnull().any()].tolist()

null 행이 포함된 열의 이름을 반환합니다.

이 질문에 대한 답변이 매우 적절하다는 것을 알지만, 저는 약간의 수정을 더하고 싶었습니다.이 답변은 null이 포함된 열만 반환하고 null의 개수도 표시합니다.

1-라이너로서:

pd.isnull(df).sum()[pd.isnull(df).sum() > 0]

묘사

  1. 각 열의 null 개수
null_count_ser = pd.isnull(df).sum()
  1. True | 해당 컬럼에 늘이 있는지 여부를 나타내는 거짓 시리즈
is_null_ser = null_count_ser > 0
  1. T|F 시리즈를 사용하면, 다음의 데이터를 필터링 할 수 있습니다.
null_count_ser[is_null_ser]

출력 예

name          5
phone         187
age           644

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

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

이것은 방법 중 하나입니다.

import pandas as pd
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan],'c':[np.nan,2,np.nan], 'd':[np.nan,np.nan,np.nan]})
print(pd.isnull(df).sum())

여기에 이미지 설명 입력

둘 다 동작합니다.

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

메서드 데이터 프레임 " "isna() ""isnull()완전히 똑같습니다.

주의: 빈 문자열''는 False(NA로 되지 않음로됩니다.

df.isna()NaN에는 True 값을 반환하고 나머지에는 False 값을 반환합니다.그럼, 다음의 작업을 실시합니다.

df.isna().any()

NaN이 있는 열에 대해서는 True를 반환하고 나머지 열에 대해서는 False를 반환합니다.

NaN이 포함된 열과 NaN이 포함된 행만 표시하려면:

isnulldf = df.isnull()
columns_containing_nulls = isnulldf.columns[isnulldf.any()]
rows_containing_nulls = df[isnulldf[columns_containing_nulls].any(axis='columns')].index
only_nulls_df = df[columns_containing_nulls].loc[rows_containing_nulls]
print(only_nulls_df)

features_with_na=[데이터 프레임[dataframe]의 기능에 대해 dataframe.dataframe]의 기능을 지정합니다.isull'sum()>0]

features_with_na의 기능: print(frame, np.round(dataframe[dataframe])isull "mean" 4", '% missing values') print (slot_with_na)

데이터 프레임의 각 열에 대한 결측값의 %를 제공합니다.

NaN 값이 포함된 열을 찾고 열 이름 목록을 가져오려는 경우 코드가 작동합니다.

na_names = df.isnull().any()
list(na_names.where(na_names == True).dropna().index)

값이 모두 NaN인 열을 찾으려면 다음을 대체할 수 있습니다.anyall.

언급URL : https://stackoverflow.com/questions/36226083/how-to-find-which-columns-contain-any-nan-value-in-pandas-dataframe

반응형