2017-01-26 3 views
4

데이터 형식의 데이터 열에 일부 데이터가 누락되었습니다. 즉 NaN입니다. 이 데이터에 대해 선형 보간법을 수행하여 누락 된 값을 채우고 싶지만 그 방법을 알지 못합니다. 필자는 NaN을 채워야하기 때문에 데이터를 범주 형으로 바꿀 수 없습니다. 무엇을하려고하는지 보여주는 간단한 예입니다. Pandas - 범주 형 데이터에서 NaN 처리

col1 col2 
5  cloudy 
3  windy 
6  NaN 
7  rainy 
10 NaN 

내가 범주 데이터에 col2 변환하지만 유지하려면 NaN을하고 그것에 대해 이동 어떻게 선형 보간법을 사용하여 입력하고 싶은 말은. 그럼 난 선형 보간을하고

col2 
1 
2 
3 
3 
2 

가 어떻게 이것을 달성 할 수 같은 것을 얻을 수는이

col2 
1 
2 
NaN 
3 
NaN 

과 같은 범주 데이터에 열을 변환 한 후 말할 수?

답변

5

UPDATE :

대신 1, 2 또는 3의 보간 즉 후 원래의 형태로 다시 데이터를 변환하는 방법이 있나요 당신, 구름 바람과 비가 다시 있나요?

솔루션 : 내가 의도적으로 원래 DF에 더 많은 행을 추가했습니다 :

In [129]: df 
Out[129]: 
    col1 col2 
0  5 cloudy 
1  3 windy 
2  6  NaN 
3  7 rainy 
4 10  NaN 
5  5 cloudy 
6 10  NaN 
7  7 rainy 

In [130]: df.dtypes 
Out[130]: 
col1  int64 
col2 category 
dtype: object 

In [131]: df.col2 = (df.col2.cat.codes.replace(-1, np.nan) 
    ...:    .interpolate().astype(int).astype('category') 
    ...:    .cat.rename_categories(df.col2.cat.categories)) 
    ...: 

In [132]: df 
Out[132]: 
    col1 col2 
0  5 cloudy 
1  3 windy 
2  6 rainy 
3  7 rainy 
4 10 cloudy 
5  5 cloudy 
6 10 cloudy 
7  7 rainy 

OLD "수치"대답 :

:

IIUC 당신은이 작업을 수행 할 수 있습니다

In [66]: df 
Out[66]: 
    col1 col2 
0  5 cloudy 
1  3 windy 
2  6  NaN 
3  7 rainy 
4 10  NaN 

첫 번째로는,290,293,210 :

In [67]: df.col2 = pd.factorize(df.col2, na_sentinel=-2)[0] + 1 

In [68]: df 
Out[68]: 
    col1 col2 
0  5  1 
1  3  2 
2  6 -1 
3  7  3 
4 10 -1 

이제 그것을 보간 수 (S '의 NaN으로 S'-1 교체)

In [69]: df.col2.replace(-1, np.nan).interpolate().astype(int) 
Out[69]: 
0 1 
1 2 
2 2 
3 3 
4 3 
Name: col2, dtype: int32 

동일한 방식이지만 category DTYPE 보간하여 직렬 변환 :

In [70]: df.col2.replace(-1, np.nan).interpolate().astype(int).astype('category') 
Out[70]: 
0 1 
1 2 
2 2 
3 3 
4 3 
Name: col2, dtype: category 
Categories (3, int64): [1, 2, 3] 
+0

완벽하게 작동합니다. 보간법을 사용하여 데이터를 다시 원래의 형태로 변환하는 방법이 있습니까? 예를 들어, 1,2,3 대신에'흐림','바람 ','우천'을 다시 할 수 있습니까? –

+1

@WasswaSamuel, 내 대답을 업데이트했습니다. - – MaxU

+1

을 확인하십시오.이 대답을 통해 많은 사람들이 배울 수있는 놀라운 점이 있습니다. 오늘 집 인수 분해()와 보간() :) – Vaishali

관련 문제