2016-07-04 21 views
0

Ich möchte einen Variablennamen in einem Ausdruck ersetzen. Allerdings erhalte ich die Fehlermeldung, dass str nicht aufrufbar ist Hier ist mein BeispielPython Textersetzung 'Str' Objekt ist nicht aufrufbar

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} 

Dies funktioniert

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

Wenn ich versuche, Wörterbuch zu parametrisieren, bekomme ich folgende Fehler

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()' nimmt eine Funktion als Argument. '" dict_sam _ "+ x' ist eine Zeichenkette. Der Inhalt der Zeichenfolge könnte mit dem Namen einer Funktion identisch sein, verbindet ihn jedoch nicht mit der Funktion –

Antwort

0

Das Problem ist, dass Sie eine Zeichenfolge an map übergeben, die in Ihrem Fall ein Wörterbuch erwartet. Damit die Karte, um diese als Wörterbuch zu behandeln anstelle einer Zeichenfolge verwenden eval die Zeichenfolge zu bewerten und die entsprechenden Wörterbuch zurück:

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

Sie können dict_sam_vocal rufen eine Zeichenfolge wie folgt aus:

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