티스토리 뷰

KNN 공부하면서 plot을 이용해 가장 accuracy가 높은 k값을 찾는 작업을 하던 중에,

 

from sklearn.neighbors import KNeighborsClassifier
import pandas as pd

result = {}
for i in range(1,150,2):
    model = KNeighborsClassifier(n_neighbors=i)
    model.fit(tr,tr_lb)
    score = model.score(ts,ts_lb)
    result[i] = score
  
pd.DataFrame(result)
# ValueError: If using all scalar values, you must pass an index

 

한참을 생각했다.. 어떻게 해결할까..?

혹시라도 Dictionary 형에서 DataFrame 형으로 전환할 때 저와 같은 오류를 보신 분들을 위해서 끄적입니다..

 

for문을 이용해서 바로바로 Dict 형태로 append 하실 분들은 
ignore_index = True 옵션을 사용하세요!

아래와 같은 dic이 있다고 했을 때, 곧바로 DataFrame을 씌우면 위와 같은 ValueError 가 발생합니다. 따라서,

import pandas as pd

dic = {'a':1, 'b':2, 'c':3, 'd':4}
dataframe = pd.DataFrame.from_dict(dic, orient = 'index')

DataFrame의 from_dict 를 사용하시고 이때, orient = 'index' 옵션을 꼭 넣어주세요.

orient = 'columns' 가 default로 설정되어 있습니다.

이렇게 하면, 아래와 같은 형태로 DataFrame이 만들어지는데 우리가 원하는 건

a, b, c, d 가 하나의 열에 들어가고 1, 2, 3, 4 가 나머지 한 열에 들어가는 형태입니다. 

 

인덱스를 열로 빼자.

 

인덱스의 값을 열로 빼기 위해서는 reset_index를 사용합니다. 그 결과는 아래와 같습니다.

dataframe = dataframe.reset_index()

 

reset_index는 index를 초기화해줌과 동시에 index의 값을 컬럼으로 빼주는 역할을 합니다. 

꼭 dict를 DataFrame형태로 전환하는 상황뿐만 아니라 요긴하게 쓰이는 Method 니까 기억해두면 좋습니다 ~_~

 

만약 reset_index를 한 뒤에 index컬럼을 빼고 싶다면 drop 을 이용하시면 되고

그게 아니라면 컬럼 이름만 변경해주시면 됩니다.

 

 

 

Ps. 더 쉽고 간단한 방법이 있다면 댓글 부탁드립니다 ^-^

'프로그래밍 > Python' 카테고리의 다른 글

String List To List !  (0) 2021.03.08
이중 리스트 처리 방법  (0) 2020.01.30
댓글
링크
최근에 올라온 글
Total
Today
Yesterday