Pandas ist wirklich großartig, aber ich bin wirklich überrascht, wie ineffizient es ist, Werte von einem Pandas.DataFrame abzurufen. Im folgenden Spielzeugbeispiel ist sogar die Methode DataFrame.iloc mehr als 100 Mal langsamer als ein Wörterbuch.Pandas DataFrame Leistung
Die Frage: Ist die Lektion hier nur, dass Wörterbücher die bessere Möglichkeit sind, Werte nachzuschlagen? Ja, ich verstehe, dass sie genau dafür geschaffen sind. Aber ich frage mich nur, ob mir etwas an DataFrame-Lookup-Leistung fehlt.
Mir ist klar, dass diese Frage eher "musing" als "fragend" ist, aber ich werde eine Antwort akzeptieren, die Einblick oder Perspektive dazu bietet. Vielen Dank.
import timeit
setup = '''
import numpy, pandas
df = pandas.DataFrame(numpy.zeros(shape=[10, 10]))
dictionary = df.to_dict()
'''
f = ['value = dictionary[5][5]', 'value = df.loc[5, 5]', 'value = df.iloc[5, 5]']
for func in f:
print func
print min(timeit.Timer(func, setup).repeat(3, 100000))
value = Wörterbuch [5] [5]
0,130625009537
Wert = df.loc [5, 5]
19,4681699276
Wert = df. Iloc [5, 5]
17.2575249672
Antworten wie diese vielleicht zu FAQ hinzufügen, finden Sie hier: https://github.com/pydata/pandas/issues/3871 – Jeff
Danke für die beiden wirklich leuchtenden Beispiele, und auch für die Analogie, die ich als Radfahrer schätze. – Owen