본문 바로가기
파이썬

파이썬 Pandas DataFrame에서 빈 셀을 포함하는 행 삭제

by º기록 2020. 11. 27.
반응형

일부 Excel 스프레드 시트를 구문 분석하여 만든 pd.DataFrame 이 있습니다. 빈 셀이있는 열입니다. 예를 들어 아래는 해당 열의 빈도에 대한 출력이며 32320 개 레코드에 테넌트 에 대한 누락 된 값이 있습니다.

>>> value_counts(Tenant, normalize=False)
                              32320
    Thunderhead                8170
    Big Data Others            5700
    Cloud Cruiser              5700
    Partnerpedia               5700
    Comcast                    5700
    SDP                        5700
    Agora                      5700
    dtype: int64

Tenant가 누락 된 행을 삭제하려고하는데 .isnull () 옵션이 누락 된 값을 인식하지 못합니다.

>>> df['Tenant'].isnull().sum()
    0

열의 데이터 유형은 "개체"입니다. 이 경우 무슨 일이 일어나고 있습니까? 테넌트 가 누락 된 레코드를 삭제하려면 어떻게해야합니까?

 

해결 방법

 

Pandas는 값이 np.nan 객체 인 경우 null로 인식하며 DataFrame에서 NaN 으로 인쇄됩니다. 누락 된 값은 팬더가 null로 인식하지 못하는 빈 문자열 일 수 있습니다. 이 문제를 해결하려면 replace () 를 사용하여 빈 스팅 (또는 빈 셀에있는 모든 것)을 np.nan 객체로 변환 한 다음 dropna를 호출 할 수 있습니다. () DataFrame에서 null 테넌트가있는 행을 삭제합니다.

설명하기 위해 Tenants 열에 임의의 값과 빈 문자열이있는 DataFrame을 만듭니다.

>>> import pandas as pd
>>> import numpy as np
>>> 
>>> df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
>>> df['Tenant'] = np.random.choice(['Babar', 'Rataxes', ''], 10)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
1 -0.008562  0.725239         
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
4  0.805304 -0.834214         
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes
9  0.066946  0.375640         

이제 Tenants 열의 빈 문자열을 다음과 같이 np.nan 개체로 바꿉니다.

>>> df['Tenant'].replace('', np.nan, inplace=True)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
1 -0.008562  0.725239      NaN
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
4  0.805304 -0.834214      NaN
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes
9  0.066946  0.375640      NaN

이제 null 값을 삭제할 수 있습니다.

>>> df.dropna(subset=['Tenant'], inplace=True)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes

 

참조 페이지 https://stackoverflow.com/questions/29314033

 

 

반응형

댓글