Panda DataFrame에서 NaN 값이 있는지 확인하는 방법
Python Panda에서 DataFrame에 하나 이상의 NaN 값이 있는지 확인하는 가장 좋은 방법은 무엇입니까?
는 그 알고 있습니다.pd.isnan
단, 각 요소에 대한 부란의 DataFrame을 반환합니다.여기 이 게시물도 제 질문에 정확히 답하지 않습니다.
Jwilner의 반응은 정확합니다.플랫 어레이의 합계가 계산보다 (이상하게) 빠르기 때문에 더 빠른 옵션이 없는지 알아보고 있었습니다.이 코드가 더 빠른 것 같습니다.
df.isnull().values.any()
import numpy as np
import pandas as pd
import perfplot
def setup(n):
df = pd.DataFrame(np.random.randn(n))
df[df > 0.9] = np.nan
return df
def isnull_any(df):
return df.isnull().any()
def isnull_values_sum(df):
return df.isnull().values.sum() > 0
def isnull_sum(df):
return df.isnull().sum() > 0
def isnull_values_any(df):
return df.isnull().values.any()
perfplot.save(
"out.png",
setup=setup,
kernels=[isnull_any, isnull_values_sum, isnull_sum, isnull_values_any],
n_range=[2 ** k for k in range(25)],
)
df.isnull().sum().sum()
느리지만,: of느 、 론 of 、 론 is 、 is is 、 is is is is is is is 。NaNs
.
몇 가지 옵션이 있습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10,6))
# Make a few areas have NaN values
df.iloc[1:3,1] = np.nan
df.iloc[5,3] = np.nan
df.iloc[7:9,5] = np.nan
데이터 프레임은 다음과 같습니다.
0 1 2 3 4 5
0 0.520113 0.884000 1.260966 -0.236597 0.312972 -0.196281
1 -0.837552 NaN 0.143017 0.862355 0.346550 0.842952
2 -0.452595 NaN -0.420790 0.456215 1.203459 0.527425
3 0.317503 -0.917042 1.780938 -1.584102 0.432745 0.389797
4 -0.722852 1.704820 -0.113821 -1.466458 0.083002 0.011722
5 -0.622851 -0.251935 -1.498837 NaN 1.098323 0.273814
6 0.329585 0.075312 -0.690209 -3.807924 0.489317 -0.841368
7 -1.123433 -1.187496 1.868894 -2.046456 -0.949718 NaN
8 1.133880 -0.110447 0.050385 -1.158387 0.188222 NaN
9 -0.513741 1.196259 0.704537 0.982395 -0.585040 -1.693810
- 옵션 1:
df.isnull().any().any()
- 을 합니다.
알고 계시죠?isnull()
다음과 같은 데이터 프레임을 반환합니다.
0 1 2 3 4 5
0 False False False False False False
1 False True False False False False
2 False True False False False False
3 False False False False False False
4 False False False False False False
5 False False False True False False
6 False False False False False False
7 False False False False False True
8 False False False False False True
9 False False False False False False
df.isnull().any()
, , , , , , , , 이 .NaN
§:
0 False
1 True
2 False
3 True
4 False
5 True
dtype: bool
더 ★★★.any()
상기 중 하나가 다음 중 하나일 경우 알려드립니다.True
> df.isnull().any().any()
True
- 옵션 2:
df.isnull().sum().sum()
이은 - 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,NaN
§:
동작은 이 동작과 합니다..any().any()
먼저 하겠습니다.NaN
하다
df.isnull().sum()
0 0
1 2
2 0
3 1
4 0
5 2
dtype: int64
마지막으로 DataFrame의 NaN 값의 총수를 얻으려면 다음 절차를 수행합니다.
df.isnull().sum().sum()
5
특정 컬럼에 NaN이 있는 행을 확인하려면 다음 절차를 수행합니다.
nan_rows = df[df['name column'].isnull()]
''이 있는 이 몇 .NaN
s":
df.isnull().T.any().T.sum()
또는 다음 행을 꺼내 조사할 필요가 있는 경우:
nan_rows = df[df.isnull().T.any()]
df.isnull().any().any()
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.
Syntax: " " " " " super 。df.isna().any(axis=None)
v0.23.2부터는 + 를 사용할 수 있습니다.axis=None
frame Data Frame 전체frame전 。
# Setup
df = pd.DataFrame({'A': [1, 2, np.nan], 'B' : [np.nan, 4, 5]})
df
A B
0 1.0 NaN
1 2.0 4.0
2 NaN 5.0
df.isna()
A B
0 False True
1 False False
2 True False
df.isna().any(axis=None)
# True
편리한 대체 수단
numpy.isnan
오래된 버전의 판다라면 또 다른 성능 옵션입니다.
np.isnan(df.values)
array([[False, True],
[False, False],
[ True, False]])
np.isnan(df.values).any()
# True
또는 합계를 확인합니다.
np.isnan(df.values).sum()
# 2
np.isnan(df.values).sum() > 0
# True
Series.hasnans
해서 '아, 아, 이렇게 불러도 돼요.Series.hasnans
NaN이 여부를 하려면 , 「NaN」을 사용합니다
df['A'].hasnans
# True
또한 컬럼에 NaN이 포함되어 있는지 여부를 확인하려면 다음과 같이 해석하면 됩니다.any
(일부러)
any(df[c].hasnans for c in df)
# True
이것은 사실 매우 빠르다.
Hobs의 훌륭한 답변에 덧붙여, 저는 Python과 Panda를 처음 접하는 사람이기 때문에 틀렸다면 지적해 주세요.
NaN이 있는 행을 확인하려면 다음 절차를 따릅니다.
nan_rows = df[df.isnull().any(1)]
any()의 축을 1로 지정하여 행에 'True'가 존재하는지 여부를 확인함으로써 이전할 필요 없이 동일한 작업을 수행합니다.
허락하다df
Panda DataFrame의 이름 및 모든 가치numpy.nan
는 늘값입니다.
null이 있는 열과 null이 없는 열(True 및 False만)을 표시하는 경우
df.isnull().any()
null이 있는 열만 표시하려면
df.loc[:, df.isnull().any()].columns
모든 열의 null 수를 표시하려면
df.isna().sum()
모든 컬럼의 null 비율을 표시하는 경우
df.isna().sum()/(len(df))*100
Null이 있는 열에만 Null의 백분율을 표시하는 경우:
df.loc[:,list(df.loc[:,df.isnull().any()].columns)].isnull().sum()/(len(df))*100
편집 1:
데이터가 누락된 위치를 시각적으로 확인하려면:
import missingno
missingdata_df = df.columns[df.isnull().any()].tolist()
missingno.matrix(df[missingdata_df])
아무도 언급하지 않았기 때문에, 라고 하는 또 다른 변수가 있습니다.hasnans
.
df[i].hasnans
에 출력합니다.True
팬더 시리즈의 값 중 하나 이상이 NaN이면False
아니라면.이 기능은 기능하지 않습니다.
판다 버전 '0.19'2'와 0.20.2'
부터pandas
이것을 위해 알아내야 한다DataFrame.dropna()
그들이 어떻게 그것을 구현하는지 살펴봤더니, 그들이 그것을 사용하고 있다는 것을 알게 되었다.DataFrame.count()
이 값은 에 포함된 모든 비표준 값을 카운트합니다.DataFrame
팬더 소스코드 참조저는 이 기술을 벤치마킹하지는 않았지만, 도서관의 저자들이 그것을 어떻게 할 것인지에 대해 현명한 선택을 했을 것이라고 생각합니다.
나는 다음을 사용하고 그것을 끈에 던져 nan 값을 확인합니다.
(str(df.at[index, 'column']) == 'nan')
이를 통해 시리즈 내의 특정 값을 확인할 수 있으며, 시리즈 내의 특정 값이 포함된 경우만 반환되는 것이 아닙니다.
df.isnull().sum()
그러면 DataFrame의 각 컬럼에 존재하는 모든 NaN 값이 카운트됩니다.
math.isnan(x), x가 NaN(숫자가 아님)이면 True를 반환하고, 그렇지 않으면 False를 사용합니다.
다음을 시도하다
df.isnull().sum()
또는
df.isna().values.any()
null을 찾아 계산된 값으로 대체하는 또 다른 흥미로운 방법이 있습니다.
#Creating the DataFrame
testdf = pd.DataFrame({'Tenure':[1,2,3,4,5],'Monthly':[10,20,30,40,50],'Yearly':[10,40,np.nan,np.nan,250]})
>>> testdf2
Monthly Tenure Yearly
0 10 1 10.0
1 20 2 40.0
2 30 3 NaN
3 40 4 NaN
4 50 5 250.0
#Identifying the rows with empty columns
nan_rows = testdf2[testdf2['Yearly'].isnull()]
>>> nan_rows
Monthly Tenure Yearly
2 30 3 NaN
3 40 4 NaN
#Getting the rows# into a list
>>> index = list(nan_rows.index)
>>> index
[2, 3]
# Replacing null values with calculated value
>>> for i in index:
testdf2['Yearly'][i] = testdf2['Monthly'][i] * testdf2['Tenure'][i]
>>> testdf2
Monthly Tenure Yearly
0 10 1 10.0
1 20 2 40.0
2 30 3 90.0
3 40 4 160.0
4 50 5 250.0
seaborn 모듈 히트맵을 사용하여 히트맵을 생성함으로써 데이터셋에 존재하는 null 값을 확인할 수 있습니다.
import pandas as pd
import seaborn as sns
dataset=pd.read_csv('train.csv')
sns.heatmap(dataset.isnull(),cbar=False)
다음을 사용하는 것이 가장 좋습니다.
df.isna().any().any()
이유는 이렇다.그렇게isna()
를 정의하기 위해 사용됩니다.isnull()
물론 둘 다 똑같습니다.
이는 승인된 답변보다 더 빠른 속도이며 모든 2D 판다 어레이를 포함합니다.
이렇게 하려면 다음 명령어를 사용합니다.df.isna().any()
그러면 모든 컬럼이 체크되고 반환됩니다.True
결측값이 있는 경우NaN
또는False
결측값이 없는 경우.
또는 를 사용할 수 있습니다..info()
에서DF
예를 들어 다음과 같습니다.
df.info(null_counts=True)
다음과 같은 열의 non_nUll 행 수를 반환합니다.
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3276314 entries, 0 to 3276313
Data columns (total 10 columns):
n_matches 3276314 non-null int64
avg_pic_distance 3276314 non-null float64
import missingno as msno
msno.matrix(df) # just to visualize. no missing value.
은 '하다'입니다.dropna
:가가:가 、 :: 、 :: 、 。
>>> len(df.dropna()) != len(df)
True
>>>
어레이에 대한 평가가 훨씬 빠르기 때문에 값 속성을 사용하는 것이 좋습니다.
arr = np.random.randn(100, 100)
arr[40, 40] = np.nan
df = pd.DataFrame(arr)
%timeit np.isnan(df.values).any() # 7.56 µs
%timeit np.isnan(df).any() # 627 µs
%timeit df.isna().any(axis=None) # 572 µs
결과:
7.56 µs ± 447 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
627 µs ± 40.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
572 µs ± 15.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
의: 행야야합합합합 note note note note note note를 실행해야 .%timeit
Jupyter 노트북으로 작업합니다.
df.apply(axis=0, func=lambda x : any(pd.isnull(x)))
각 컬럼에 Nan이 포함되어 있는지 확인합니다.
다음을 사용하여 'NaN'이 존재하는지 확인할 수 있을 뿐만 아니라 각 열에 있는 'NaN'의 비율도 확인할 수 있습니다.
df = pd.DataFrame({'col1':[1,2,3,4,5],'col2':[6,np.nan,8,9,10]})
df
col1 col2
0 1 6.0
1 2 NaN
2 3 8.0
3 4 9.0
4 5 10.0
df.isnull().sum()/len(df)
col1 0.0
col2 0.2
dtype: float64
import missingno
missingno.bar(df)# will give you exact no of values and values missing
취급하는 데이터의 유형에 따라서는 dropna를 False로 설정하여 EDA를 실행하는 동안 각 열의 값만 얻을 수도 있습니다.
for col in df:
print df[col].value_counts(dropna=False)
범주형 변수에는 잘 작동하지만 고유 값이 많은 경우에는 잘 작동하지 않습니다.
언급URL : https://stackoverflow.com/questions/29530232/how-to-check-if-any-value-is-nan-in-a-pandas-dataframe
'programing' 카테고리의 다른 글
하위 쿼리에서 MYSQL 그룹을 구성하지만 모든 데이터가 필요합니다. (0) | 2022.09.25 |
---|---|
NameError: Python에서 이름 'reduce'가 정의되지 않았습니다. (0) | 2022.09.25 |
Panda DataFrame에서 NaN 값이 있는지 확인하는 방법 (0) | 2022.09.25 |
JavaScript 실행을 중지할 수 있습니까? (0) | 2022.09.25 |
MariaDB 10에서 Connector/NET과 트랜잭션을 열 때 구문 오류 발생 (0) | 2022.09.25 |