Pandas Dataframe에서 빈 항목 또는 NaN 항목 찾기
팬더 데이터 프레임을 통해 누락된 엔트리 또는 NaN 엔트리가 어디에 있는지 검색하려고 합니다.
다음은 제가 작업하고 있는 데이터 프레임입니다.
cl_id a c d e A1 A2 A3
0 1 -0.419279 0.843832 -0.530827 text76 1.537177 -0.271042
1 2 0.581566 2.257544 0.440485 dafN_6 0.144228 2.362259
2 3 -1.259333 1.074986 1.834653 system 1.100353
3 4 -1.279785 0.272977 0.197011 Fifty -0.031721 1.434273
4 5 0.578348 0.595515 0.553483 channel 0.640708 0.649132
5 6 -1.549588 -0.198588 0.373476 audio -0.508501
6 7 0.172863 1.874987 1.405923 Twenty NaN NaN
7 8 -0.149630 -0.502117 0.315323 file_max NaN NaN
참고: 빈 항목은 빈 문자열입니다. 이는 파일에 데이터 프레임에서 가져온 영숫자 내용이 없었기 때문입니다.
이 데이터 프레임이 있는 경우 NaN 또는 공백 항목이 발생하는 인덱스가 있는 목록을 어떻게 찾을 수 있습니까?
np.where(pd.isnull(df))
값이 NaN인 행 및 열 인덱스를 반환합니다.
In [152]: import numpy as np
In [153]: import pandas as pd
In [154]: np.where(pd.isnull(df))
Out[154]: (array([2, 5, 6, 6, 7, 7]), array([7, 7, 6, 7, 6, 7]))
In [155]: df.iloc[2,7]
Out[155]: nan
In [160]: [df.iloc[i,j] for i,j in zip(*np.where(pd.isnull(df)))]
Out[160]: [nan, nan, nan, nan, nan, nan]
applymap을 사용하여 빈 문자열인 값을 찾을 수 있습니다.
In [182]: np.where(df.applymap(lambda x: x == ''))
Out[182]: (array([5]), array([7]))
를 사용합니다.applymap
에서는 DataFrame의 각 셀에 대해 Python 함수를 한 번 호출해야 합니다.대규모 DataFrame의 경우 속도가 느릴 수 있으므로 대신 모든 빈 셀에 NaN이 포함되도록 배치하여 다음을 사용할 수 있도록 하는 것이 좋습니다.pd.isnull
.
시도해 보기:
df[df['column_name'] == ''].index
NaN의 경우 다음을 시도할 수 있습니다.
pd.isna(df['column_name'])
열에 다음이 포함되어 있는지 확인합니다.Nan
사용..isnull()
를 사용하여 빈 문자열을 확인합니다..eq('')
, 그런 다음 bitwise OR 연산자를 사용하여 둘을 결합합니다.|
.
합해서axis 0
결측 데이터가 있는 열을 찾은 다음 합하는 방법axis 1
결측 데이터가 있는 행의 인덱스 위치로 이동합니다.
missing_cols, missing_rows = (
(df2.isnull().sum(x) | df2.eq('').sum(x))
.loc[lambda x: x.gt(0)].index
for x in (0, 1)
)
>>> df2.loc[missing_rows, missing_cols]
A2 A3
2 1.10035
5 -0.508501
6 NaN NaN
7 NaN NaN
의지했습니다.
df[ (df[column_name].notnull()) & (df[column_name]!=u'') ].index
최근엔 널과 빈 스트링 셀을 한 번에 얻을 수 있습니다
제 생각에는 시간 낭비하지 말고 NaN으로 대체하세요!그런 다음 Na로 모든 항목을 검색합니다. (어차피 빈 값은 결측값이기 때문에 그렇습니다.)
import numpy as np # to use np.nan
import pandas as pd # to use replace
df = df.replace(' ', np.nan) # to get rid of empty values
nan_values = df[df.isna().any(axis=1)] # to get all rows with Na
nan_values # view df with NaN rows only
부분 솔루션: 단일 문자열 열의 경우tmp = df['A1'].fillna(''); isEmpty = tmp==''
빈 문자열 또는 NaN 값이 있는 경우 부울 Series of True를 제공합니다.
당신도 좋은 일을 하십니다.
text_empty = df['column name'].str.len() > -1
df.loc[text_empty].index
결과는 빈 행과 인덱스 번호가 됩니다.
공간이 여러 개일 수 있는 경우를 다루는 또 다른 옵션은 다음을 사용하는 것입니다.isspace()
파이썬 함수
df[df.col_name.apply(lambda x:x.isspace() == False)] # will only return cases without empty spaces
NaN 값 추가:
df[(df.col_name.apply(lambda x:x.isspace() == False) & (~df.col_name.isna())]
특정 열에 빈 셀이 들어 있는 모든 행을 가져옵니다.
DF_new_row=DF_raw.loc[DF_raw['columnname']=='']
이것은 체크 조건을 만족시키는 DF_raw의 부분 집합을 제공합니다.
regex와 함께 문자열 메서드를 사용하여 빈 문자열이 있는 셀을 찾을 수 있습니다.
df[~df.column_name.str.contains('\w')].column_name.count()
언급URL : https://stackoverflow.com/questions/27159189/find-empty-or-nan-entry-in-pandas-dataframe
'code' 카테고리의 다른 글
메모장++:파일 로드 시 Language를 Xml로 자동 설정하는 방법 (0) | 2023.09.20 |
---|---|
VBA를 사용하여 SQL 테이블에만 새 레코드 삽입 (0) | 2023.09.20 |
Oracle: 여러 열에 대한 빠른 NOT IN (0) | 2023.09.20 |
판다 콘캣은 nan 값을 만들어냅니다. (0) | 2023.09.20 |
https://index.docker.io 에 연결하는 동안 네트워크 시간 초과됨 (0) | 2023.09.20 |