Python Pandas-누락 된 데이터

누락 된 데이터는 실제 시나리오에서 항상 문제입니다. 기계 학습 및 데이터 마이닝과 같은 영역은 누락 된 값으로 인한 데이터 품질 저하로 인해 모델 예측의 정확성에 심각한 문제에 직면합니다. 이러한 영역에서 결 측값 처리는 모델을보다 정확하고 유효하게 만들기위한 주요 초점입니다.

데이터가 누락 된시기와 이유

제품에 대한 온라인 설문 조사를 고려해 보겠습니다. 많은 경우 사람들은 그들과 관련된 모든 정보를 공유하지 않습니다. 경험을 공유하는 사람은 거의 없지만 제품을 사용하는 기간은 아닙니다. 제품 사용 기간과 경험을 공유하는 사람은 거의 없지만 연락처 정보는 공유하지 않습니다. 따라서 어떤 방식 으로든 데이터의 일부가 항상 누락되며 이는 실시간으로 매우 일반적입니다.

이제 Pandas를 사용하여 누락 된 값 (예 : NA 또는 NaN)을 처리하는 방법을 살펴 보겠습니다.

# import the pandas library
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df

이것의 output 다음과 같습니다-

one        two      three
a   0.077988   0.476149   0.965836
b        NaN        NaN        NaN
c  -0.390208  -0.551605  -2.301950
d        NaN        NaN        NaN
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g        NaN        NaN        NaN
h   0.085100   0.532791   0.887415

재 인덱싱을 사용하여 누락 된 값이있는 DataFrame을 만들었습니다. 출력에서NaN 방법 Not a Number.

결 측값 확인

누락 된 값을 더 쉽게 감지 할 수 있도록 (그리고 다른 배열 dtype에서) Pandas는 isnull()notnull() 또한 Series 및 DataFrame 객체의 메서드 인 함수-

예 1

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].isnull()

이것의 output 다음과 같습니다-

a  False
b  True
c  False
d  True
e  False
f  False
g  True
h  False
Name: one, dtype: bool

예 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].notnull()

이것의 output 다음과 같습니다-

a  True
b  False
c  True
d  False
e  True
f  True
g  False
h  True
Name: one, dtype: bool

누락 된 데이터로 계산

  • 데이터를 합산 할 때 NA는 0으로 처리됩니다.
  • 데이터가 모두 NA이면 결과는 NA가됩니다.

예 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].sum()

이것의 output 다음과 같습니다-

2.02357685917

예 2

import pandas as pd
import numpy as np

df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
print df['one'].sum()

이것의 output 다음과 같습니다-

nan

누락 된 데이터 정리 / 채우기

Pandas는 누락 된 값을 정리하는 다양한 방법을 제공합니다. fillna 함수는 다음 섹션에서 설명하는 몇 가지 방법으로 Null이 아닌 데이터로 NA 값을 "채울"수 있습니다.

NaN을 스칼라 값으로 바꾸기

다음 프로그램은 "NaN"을 "0"으로 바꾸는 방법을 보여줍니다.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
'two', 'three'])

df = df.reindex(['a', 'b', 'c'])

print df
print ("NaN replaced with '0':")
print df.fillna(0)

이것의 output 다음과 같습니다-

one        two     three
a  -0.576991  -0.741695  0.553172
b        NaN        NaN       NaN
c   0.744328  -1.735166  1.749580

NaN replaced with '0':
         one        two     three
a  -0.576991  -0.741695  0.553172
b   0.000000   0.000000  0.000000
c   0.744328  -1.735166  1.749580

여기서 우리는 값 0으로 채우고 있습니다. 대신 다른 값으로 채울 수도 있습니다.

NA를 앞뒤로 채우기

리 인덱싱 장에서 논의 된 채우기 개념을 사용하여 누락 된 값을 채울 것입니다.

Sr. 아니요 방법 및 조치
1

pad/fill

채우기 방법 앞으로

2

bfill/backfill

채우기 방법 뒤로

예 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='pad')

이것의 output 다음과 같습니다-

one        two      three
a   0.077988   0.476149   0.965836
b   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
d  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

예 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='backfill')

이것의 output 다음과 같습니다-

one        two      three
a   0.077988   0.476149   0.965836
b  -0.390208  -0.551605  -2.301950
c  -0.390208  -0.551605  -2.301950
d  -2.000303  -0.788201   1.510072
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g   0.085100   0.532791   0.887415
h   0.085100   0.532791   0.887415

결 측값 삭제

단순히 누락 된 값을 제외하려면 다음을 사용하십시오. dropna 기능과 함께 axis논의. 기본적으로 axis = 0, 즉 행을 따라, 즉 행 내의 값이 NA이면 전체 행이 제외됨을 의미합니다.

예 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna()

이것의 output 다음과 같습니다-

one        two      three
a   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

예 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna(axis=1)

이것의 output 다음과 같습니다-

Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]

누락 된 (또는) 일반 값 바꾸기

여러 번 일반적인 값을 특정 값으로 바꿔야합니다. replace 메서드를 적용하여이를 달성 할 수 있습니다.

NA를 스칼라 값으로 바꾸는 것은 fillna() 함수.

예 1

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})

print df.replace({1000:10,2000:60})

이것의 output 다음과 같습니다-

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

예 2

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})
print df.replace({1000:10,2000:60})

이것의 output 다음과 같습니다-

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60