熊猫系列浮动指数

use*_*012 5 python indexing series pandas

我试图使用浮点数作为pandas系列的索引,但它似乎没有正常工作.例如,在下面的代码中,当我尝试调用值策略[9.7]时,它返回错误.我认为这是因为浮点数9.7在计算机中没有精确地存储为9.7(例如,9.7000000001).反正有没有绕过这个?或者使用浮点索引根本不是一个好主意?

任何输入都非常感谢.谢谢!

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]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 0

您使用的是哪个版本的 Pandas?

根据文件

Float64索引

注意 从 0.14.0 开始,Float64Index 由本机 float64 dtype 数组支持。在 0.14.0 之前,Float64Index 由对象数据类型数组支持。在后端使用 float64 数据类型可将算术运算速度提高约 30 倍,而 Float64Index 本身的布尔索引操作速度可提高约 2 倍。0.13.0 版本中的新增功能。

默认情况下,在创建索引时传递浮点或混合整数浮点值时,将自动创建 Float64Index。这实现了纯基于标签的切片范例,使得标量索引和切片的 [],ix,loc 工作完全相同。