Ich betreibe Anaconda unter OS X 10.11.5 und kämpfe um den Zugriff auf Daten in einem Pandas DataFrame. Es funktioniert zwar direkt, aber wenn ich versuche, Argumente in einer Zeichenfolge zu bewerten, die ich durch Iteration generiert habe, schlägt es fehl. Hier ist eine einfachere Version, die das gleiche Problem ohne die Iteration erzeugt.Python - warum schlägt eval bei diesem String/Ausdruck fehl?
Der direkte Zugang - das funktioniert gut:
from pandas import *
df = read_csv('~/FutureLearn/Learn to Code for Data Analysis/WHO POP TB all.csv')
df1 = (df['Country'] == 'Brazil') # Also works without()
df1 # A pandas Series
df[df1] # Accesses DataFrame OK
Dies ist ein Versuch, in dem der Wähler als String erzeugt wird und dann ausgewertet:
df1str = ("df['Country'] == 'Brazil'")
eval(df1str) # ValueError: unknown type str224 - would have expected Series
Das die Valueerror erzeugt und ich kann nicht verwenden der Ausdruck für den Zugriff auf den DataFrame. Warum funktioniert das nicht eval
? Oder was muss ich tun, um eine Zeichenfolge für den Zugriff auf den DataFrame verwenden zu können?
Danke für jede Hilfe (auf diese, meine erste StackOverflow Post).
'df1str = ("df [ 'Country'] == 'Brazil'")' keine Ausgabe verwenden möchten, müssen Daten zurückgegeben oder ausgedruckt werden. Eval ist 'string' Basis nicht' None' oder 'Variable' Typ. Python ist keine magische Sprache! – dsgdfg
wegen pandas import, wird nicht eval von pandas.eval shadowed? –
@dsgdfg: 'type (df1str)' ist 'str' und die Variable gibt den zugewiesenen String-Wert zurück. Ich nahm an, dass ich eine Variable an "eval" und "mySum =" 1 + 2 "übergeben könnte; eval (mySum) 'funktioniert. – espri