티스토리 뷰
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 |
댓글