2017-04-14 3 views
0

목록 형식으로 구성된 데이터 프레임 열의 값을 다시 코딩하려고합니다. 데이터 프레임 열의 문자열 값을 대체하는 방법을 알고 있지만 목록에서이를 수행하는 방법에 어려움을 겪고 있습니다.데이터 프레임 열의 목록 값 재 코딩

{0: '[Crime, Drama]', 
1: '[Crime, Drama]', 
2: '[Crime, Drama]', 
3: '[Action, Crime, Drama, Thriller]', 
4: '[Crime, Drama]', 
5: '[Biography, Drama, History]', 
6: '[Crime, Drama]', 
7: '[Adventure, Drama, Fantasy]', 
8: '[Western]', 
9: '[Drama]'} 

예를 들어, 내가 역사에 스릴러와 전기에 대한 모든 범죄를 코딩하고 싶습니다 : 여기

내 데이터의 조각이다.

나는 문자열 교체를 위해 아래 작품

df.loc[df['genre']=='Crime']='Thriller' 

가치를 알고 있지만 어떻게 목록이 수정합니까?

감사합니다.

EDIT (IMDB 데이터베이스로부터 추출 된 데이터)이 dataframe를 만드는 데 사용되는 코드이다 :

# these are the variables we want to (ie are able to) extract from the movie object 
metadata = ('title', 'rating', 'genre', "plot", "language", "runtime", "year", "color", "country" , "votes") 
#creates dataframe with variable name headers 
df = pd.DataFrame(np.random.randn(250, len(metadata)), columns=metadata) 

#these are all different data types, including lists, this makes it compile 
df = df.astype('object') 
#populate df with movie objects 
for i in range(250): 
    for j in metadata: 
     df.loc[i, j] = movies_list[i].get(j) 

# convert to the right data types: 
metadata_dict_dtypes = {"title": unicode, 
         "rating": float, 
         "genre":list, 
         "plot": str, 
         "language":list, 
         "runtime":list, 
         "year":int, 
         "color":list, 
         "country":list , 
         "votes":int} 
for colname, my_dtype in metadata_dict_dtypes.iteritems(): 
    df[colname] = df[colname].astype(my_dtype) 
+0

do 0-9는 데이터 프레임의 다른 열 또는 행을 나타 냅니까? –

+0

행이 다릅니다. – yogz123

+1

'[Crime, Drama]'(괄호 안의 괄호 안의 바깥 쪽 따옴표)는 목록이 아닌 문자열처럼 보입니다. 실제로이 데이터 프레임을 생성하는 코드를 보여줄 수 있으므로 작업 한 내용을 정확히 알고 있습니까? –

답변

0

이 올바르게 DataFrame에 목록으로 포맷 가정하면. 행을 취하고 장르 이름 변경 맵을 인수로 사용하여 DataFrame에 적용하는 함수를 작성할 수 있습니다. 예를 들어

name_map = {'Crime': 'Thriller', 'Biography': 'History'} 
def change_names(row, name_map): 
    for name in name_map: 
     if name in row.genre: 
      row.genre[row.genre.index(name)] = name_map[name] 
    return row 
df = df.apply(lambda row: change_name(row, name_map), axis=1) 

벡터화되지 않았지만 작업이 완료됩니다.

0

목록 이해력으로 업데이트하는 것이 좋습니다. 아래는 1 열 데이터 프레임 Genre 목록입니다.

df = pd.DataFrame({'Genre': [['Crime', 'Drama'], 
          ['Crime', 'Drama'], 
          ['Crime', 'Drama'], 
          ['Action', 'Crime', 'Drama', 'Thriller'], 
          ['Crime', 'Drama'], 
          ['Biography', 'Drama', 'History'], 
          ['Crime', 'Drama'], 
          ['Adventure', 'Drama', 'Fantasy'], 
          ['Western'], 
          ['Drama']]})  
print(df) 
#        Genre 
# 0     [Crime, Drama] 
# 1     [Crime, Drama] 
# 2     [Crime, Drama] 
# 3 [Action, Crime, Drama, Thriller] 
# 4     [Crime, Drama] 
# 5  [Biography, Drama, History] 
# 6     [Crime, Drama] 
# 7  [Adventure, Drama, Fantasy] 
# 8       [Western] 
# 9       [Drama] 

df['Genre'] = [['Thriller' if i=='Crime' else i for i in m] for m in df['Genre']] 
print(df) 
#         Genre 
# 0     [Thriller, Drama] 
# 1     [Thriller, Drama] 
# 2     [Thriller, Drama] 
# 3 [Action, Thriller, Drama, Thriller] 
# 4     [Thriller, Drama] 
# 5   [Biography, Drama, History] 
# 6     [Thriller, Drama] 
# 7   [Adventure, Drama, Fantasy] 
# 8       [Western] 
# 9        [Drama] 
관련 문제