2016-07-04 3 views
0

Я хочу заменить имя переменной в выражении. Однако я получаю ошибку, что ул не является вызываемая Вот мой примерpython text substitution '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, которая ожидает словарь в вашем случае. Для того, чтобы карта для лечения его в качестве словаря вместо строки, используйте eval оценить строку и получить обратно соответствующий словарь:

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

Вы можете вызвать dict_sam_vocal, используя строку, как это:

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

 Смежные вопросы

  • Нет связанных вопросов^_^