저는 기계 학습을 연습하고 영화/등급 데이터 세트로 작업하고 있습니다. 각 장르 (숫자 약 1300 개)를 숫자로 식별하는 데이터 프레임에 새 열을 만들려고합니다. 제 논리는 고유 한 장르와 정수로 된 사전을 만드는 것입니다. 그런 다음 for 루프를 만들어 데이터 프레임의 각 행을 반복하면서 각 장르를 확인한 다음 적절한 값을 "genre_Id"라는 새 열에 할당합니다. 그러나 이것은 내가 ctrl-c로 깰 수없는 무한 루프를 일으켰다. Jupyter에서 작업 할 때와 같은 문제 (인터럽트 커널이 중단하는 데 실패 함). 아래는 나의 접근 방법을 요약 한 것이다.dict에서 pandas DataFrame의 새 열로 숫자 값 추가
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
movies_data = pd.read_csv("C://mypython/moviedata/movies.csv")
ratings_data = pd.read_csv("C://mypython/moviedata/ratings.csv")
joined = pd.merge(movies_data,ratings_data, how = 'inner', on=['movieId'])
print(joined.head())
pd.options.display.float_format = '{:,.2f}'.format
genres = joined['genres'].unique()
genre_dict = {}
Id = 1
for i in genres:
genre_dict[i] = Id
Id += 1
joined['genre_id'] = 0
increment = 0
for i in joined['genres']:
if i in genre_dict:
joined['genre_id'][increment] = genre_dict[i]
increment += 1
는 내가 아마 데이터 세트에 대한 20,000,000 행이 같이 작업 할 수있는 작은 샘플을 복용해야한다 알고 있지만 나는이 운동으로 이것을 시도 거라고 생각. "복사 경고에서 설정 값"을 받지만 다른 프로젝트에서는이 문제가 발생하지 않았습니다. 이 작업을 수행하는 방법에 대한 생각은 크게 감사하겠습니다.
편집 시리즈 맵 기능을 사용하여 해결책을 찾았습니다.
내가 방금 언급 할 권한이 없다 [ 'genre_id'] = joined.genres.map (genre_dict)
사실 나는 방금 해결책을 찾았습니다. joined [ 'genre_id'] = joined.genres.map (genre_dict) –
@stephenbarter 사실 저는 ML 알고리즘에 적용 할 범주 값을 만났을 때 이런 식으로 사용했지만 범주 값이 5 개 또는 6 개 이상의 열 사전을 작성하여 사용하는 것은 시간이 많이 소요됩니다. 그 대신에 OneHotEncoder가 최선의 해결책입니다. 알아 낸 것이라면 나는 대답을 지울 것입니다. –
나는 당신이 옳다고 믿습니다. 이 옵션도 잘 작동합니다. 감사합니다 –