Ich versuche Float-Nummern als Index für Pandas Series zu verwenden, aber es scheint nicht zu funktionieren. Wenn ich beispielsweise im folgenden Code versuche, die Wert-Richtlinie [9.7] aufzurufen, wird der Fehler zurückgegeben. Ich glaube, dies liegt an der Tatsache, dass die Gleitzahl 9,7 nicht genau als 9,7 in dem Computer gespeichert ist (z. B. 9,7000000001). Gibt es da irgendwie um das zu umgehen? Oder ist es einfach keine gute Idee, den Float-Index zu verwenden?Pandas Series float index
Jede Eingabe wird sehr geschätzt. Vielen Dank!
import numpy as np
import pandas as pd
W_grid = np.arange(100)*0.1
policy = pd.Series(np.random.rand(100), index = W_grid)
policy[9.7]
KeyError Traceback (most recent call last)
<ipython-input-224-89dfc3470c3d> in <module>()
----> 1 policy[9.7]
D:\Warren\Anaconda\lib\site-packages\pandas\core\series.pyc in __getitem__(self, key)
482 def __getitem__(self, key):
483 try:
--> 484 result = self.index.get_value(self, key)
485
486 if not np.isscalar(result):
D:\Warren\Anaconda\lib\site-packages\pandas\core\index.pyc in get_value(self, series, key)
2038
2039 k = _values_from_object(key)
-> 2040 loc = self.get_loc(k)
2041 new_values = series.values[loc]
2042 if np.isscalar(new_values) or new_values is None:
D:\Warren\Anaconda\lib\site-packages\pandas\core\index.pyc in get_loc(self, key)
2091 except (TypeError, NotImplementedError):
2092 pass
-> 2093 return super(Float64Index, self).get_loc(key)
2094
2095 @property
D:\Warren\Anaconda\lib\site-packages\pandas\core\index.pyc in get_loc(self, key)
1179 loc : int if unique index, possibly slice or mask if not
1180 """
-> 1181 return self._engine.get_loc(_values_from_object(key))
1182
1183 def get_value(self, series, key):
D:\Warren\Anaconda\lib\site-packages\pandas\index.pyd in pandas.index.IndexEngine.get_loc (pandas\index.c:3656)()
D:\Warren\Anaconda\lib\site-packages\pandas\index.pyd in pandas.index.IndexEngine.get_loc (pandas\index.c:3534)()
D:\Warren\Anaconda\lib\site-packages\pandas\hashtable.pyd in pandas.hashtable.Float64HashTable.get_item (pandas\hashtable.c:9645)()
D:\Warren\Anaconda\lib\site-packages\pandas\hashtable.pyd in pandas.hashtable.Float64HashTable.get_item (pandas\hashtable.c:9586)()
KeyError: 9.7
Es ist keine gute Idee, float dtype als Index zu verwenden, es kann manchmal funktionieren, aber es ist nicht garantiert. Gibt es einen Grund, warum Sie Floaten für den Index benötigen? – EdChum
Nur für die Bequemlichkeit. Ansonsten brauche ich ein anderes Array, um die Werte aufzuzeichnen - ich denke, das muss ich tun. – user3821012
Sie könnten immer einen Multiplikator verwenden - zum Beispiel statt "np.arange (100) * 0.1", verwenden Sie stattdessen "np.arange (1000)", dann korrigieren Sie den Multiplikator später in Ihrem Code. – MattDMo