2016-07-04 1 views
0

표현식에서 변수 이름을 대체하고 싶습니다. 그러나 나는 STR 여기 호출하지 않다는 오류가 나의 예를파이썬 텍스트 대체 'str'객체를 호출 할 수 없습니다.

import numpy as np 
import pandas as pd 
raw_data = {'student_name': ['M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9', 'M10', 'M11', 'M12'], 
     'vocal_grade': ['R', 'X', 'Y', 'Z', 'R', 'X', 'X', 'X', 'X', 'X', 'X', np.NaN]} 
df = pd.DataFrame(raw_data, columns = ['student_name', 'vocal_grade']) 

dict_sam_vocal = {'R': 8, 'X': 5, 'Y': 6, 'Z': 7} 

인이 작동 잘

x = 'vocal' 
df[x+'_score'] = df[x+"_grade"].map(dict_sam_vocal) 

내가 사전 변수화하려고

, 나는 다음과 같은 오류를 얻을

df[x+'_score'] = df[x+"_grade"].map("dict_sam_"+x) 

pandas/src/inference.pyx in pandas.lib.map_infer (pandas/lib.c:63043)() 

TypeError: 'str' object is not callable 
+0

.map()은 인수로 함수를 취합니다. ''dict_sam _ "+ x'는 문자열입니다. 문자열의 내용은 함수의 이름과 같을 수 있지만 어떤 식 으로든 함수에 연결하지는 않습니다 –

답변

0

문제는 문자열을 map에 전달했는데이 경우에는 사전을 기다리고있는 것입니다.

x = 'vocal' 
df[x+'_score'] = df[x+"_grade"].map(eval("dict_sam_"+x)) 
0

당신은이 같은 문자열을 사용 dict_sam_vocal를 호출 할 수 있습니다 :

맵, 문자열이 아닌 사전으로 취급 문자열을 평가하는 eval를 사용하고 해당 사전을 다시 얻기 위해서는 df[x+'_score'] = df[x+"_grade"].map(globals()["dict_sam_"+x])

관련 문제