Pandas - 잘못된 데이터 수정
잘못된 데이터
"잘못된 데이터"는 "빈 셀" 또는 "잘못된 형식"일 필요가 없으며 누군가 "1.99" 대신 "199"를 등록한 경우와 같이 틀릴 수 있습니다.
데이터 세트를 보고 잘못된 데이터를 발견할 수 있습니다. 데이터 세트가 어떠해야 하는지에 대한 기대가 있기 때문입니다.
데이터 세트를 살펴보면 7행의 기간이 450이지만 다른 모든 행의 기간은 30~60임을 알 수 있습니다.
틀릴 필요는 없지만 이것이 누군가의 운동 세션 데이터 세트임을 고려하면 이 사람이 450분 동안 운동하지 않았다는 사실로 결론을 내립니다.
Duration Date Pulse Maxpulse Calories
0 60 '2020/12/01' 110 130 409.1
1 60 '2020/12/02' 117 145 479.0
2 60 '2020/12/03' 103 135 340.0
3 45 '2020/12/04' 109 175 282.4
4 45 '2020/12/05' 117 148 406.0
5 60 '2020/12/06' 102 127 300.0
6 60 '2020/12/07' 110 136 374.0
7 450 '2020/12/08' 104 134 253.3
8 30 '2020/12/09' 109 133 195.1
9 60 '2020/12/10' 98 124 269.0
10 60 '2020/12/11' 103 147 329.3
11 60 '2020/12/12' 100 120 250.7
12 60 '2020/12/12' 100 120 250.7
13 60 '2020/12/13' 106 128 345.3
14 60 '2020/12/14' 104 132 379.3
15 60 '2020/12/15' 98 123 275.0
16 60 '2020/12/16' 98 120 215.2
17 60 '2020/12/17' 100 120 300.0
18 45 '2020/12/18' 90 112 NaN
19 60 '2020/12/19' 103 123 323.0
20 45 '2020/12/20' 97 125 243.0
21 60 '2020/12/21' 108 131 364.2
22 45 NaN 100 119 282.0
23 60 '2020/12/23' 130 101 300.0
24 45 '2020/12/24' 105 132 246.0
25 60 '2020/12/25' 102 126 334.5
26 60 20201226 100 120 250.0
27 60 '2020/12/27' 92 118 241.0
28 60 '2020/12/28' 103 132 NaN
29 60 '2020/12/29' 100 132 280.0
30 60 '2020/12/30' 102 129 380.3
31 60 '2020/12/31' 92 115 243.0
7행의 "Duration"과 같은 잘못된 값을 어떻게 고칠 수 있습니까?
값 바꾸기
잘못된 값을 수정하는 한 가지 방법은 값을 다른 값으로 바꾸는 것입니다.
이 예에서는 오타일 가능성이 가장 높으며 값은 "450" 대신 "45"여야 하며 7행에 "45"를 삽입하면 됩니다.
예시
7행에서 "기간" = 45로 설정:
df.loc[7, 'Duration'] = 45
작은 데이터 세트의 경우 잘못된 데이터를 하나씩 교체할 수 있지만 큰 데이터 세트는 교체할 수 없습니다.
더 큰 데이터 세트에 대한 잘못된 데이터를 대체하기 위해 몇 가지 규칙을 생성할 수 있습니다. 예를 들어 법적 값에 대한 일부 경계를 설정하고 경계 외부에 있는 모든 값을 대체할 수 있습니다.
예시
"Duration" 열의 모든 값을 반복합니다.
값이 120보다 크면 120으로 설정합니다.
for x in df.index:
if df.loc[x, "Duration"] > 120:
df.loc[x, "Duration"] = 120
행 제거
잘못된 데이터를 처리하는 또 다른 방법은 잘못된 데이터가 포함된 행을 제거하는 것입니다.
이렇게 하면 대체할 항목을 찾을 필요가 없으며 분석을 수행하는 데 필요하지 않을 가능성이 높습니다.
예시
"Duration"이 120보다 큰 행 삭제:
for x in df.index:
if df.loc[x, "Duration"] > 120:
df.drop(x, inplace = True)