Python 在pandas.cut中包含给出意外结果的\u lower

Python 在pandas.cut中包含给出意外结果的\u lower,python,pandas,Python,Pandas,因此,以下代码(mydata是一个pandas.Series,浮点数为X.XX格式,最小值大于1.195,如果有必要): 给我这个输出: (1.1940000000000002, 2.655] 19 (2.655, 4.115] 12 (4.115, 5.575] 17 (5.575, 7.035] 15 (7.035, 8.495] 5 (8.495, 9.9

因此,以下代码(mydata是一个
pandas.Series
,浮点数为X.XX格式,最小值大于1.195,如果有必要):

给我这个输出:

(1.1940000000000002, 2.655]    19
(2.655, 4.115]                 12
(4.115, 5.575]                 17
(5.575, 7.035]                 15
(7.035, 8.495]                  5
(8.495, 9.955]                  8
(9.955, 11.415]                 2
(11.415, 12.875]                2
dtype: int64
[ 1.195  2.655  4.115  5.575  7.035  8.495  9.955 11.415 12.875]
我不知道“1.194000000000002”从何而来(浮点问题?),也不知道为什么它实际上没有被包括在内,尽管
include\u lowest=True

我正试图打印我生成的直方图图的频率表,因此理想情况下,箱子应该像
[),[),…,[]
那样覆盖整个范围,这在
熊猫中似乎是不可能的。剪切
,除非我遗漏了什么

编辑:似乎由于
IntervalIndex
,所有
包含的最低值都是通过
精度
降低最低限值。因此,它没有实际包含1.195,而是将其改为1.194(尽管它显然失败)

所以我想出了一个“hack”目前,我把它放在这里,以防对某人有用:

out  = pd.cut(mydata, bins=phist, right=True, include_lowest=True)
z = out.value_counts(sort=False)
new = z.index.rename_categories({z.index[0]: pd.Interval(phist[0].round(3), phist[1].round(3), closed='both')})
z = z.reindex(new, fill_value=z[0])
print(z)
它基本上取代了第一个间隔,但由于
include_lowest=True
为false,因此无论我们如何手动填充
fill_value=z[0]
,值都是正确的

给我们:

[1.195, 2.655]      19
(2.655, 4.115]      12
(4.115, 5.575]      17
(5.575, 7.035]      15
(7.035, 8.495]       5
(8.495, 9.955]       8
(9.955, 11.415]      2
(11.415, 12.875]     2
它仍然无法复制NumPy处理时间间隔的方式(出于某种原因,我们没有包含最高值的代码,因此无法保证正确性),但仍然更有意义,因为它不会从我们的垃圾箱中删除数据。

因此,我暂时提出了一个“黑客”方案,我将其放在这里,以防对某人有用:

out  = pd.cut(mydata, bins=phist, right=True, include_lowest=True)
z = out.value_counts(sort=False)
new = z.index.rename_categories({z.index[0]: pd.Interval(phist[0].round(3), phist[1].round(3), closed='both')})
z = z.reindex(new, fill_value=z[0])
print(z)
它基本上取代了第一个间隔,但由于
include_lowest=True
为false,因此无论我们如何手动填充
fill_value=z[0]
,值都是正确的

给我们:

[1.195, 2.655]      19
(2.655, 4.115]      12
(4.115, 5.575]      17
(5.575, 7.035]      15
(7.035, 8.495]       5
(8.495, 9.955]       8
(9.955, 11.415]      2
(11.415, 12.875]     2

它仍然无法复制NumPy处理时间间隔的方式(出于某种原因,我们没有
include\u highest
,因此无法保证正确性),但仍然更有意义,因为它不会从我们的垃圾箱中删除数据。

我没有直接解决您的问题的方法,但我有一些可能会有所帮助的方法。如果它不会在其他地方产生任何问题,您可以添加额外的起始间隔0-1.195。我没有直接解决您的问题的方法,但我有一些可能会有所帮助的方法。您可以d如果在其他地方不产生任何问题,则增加额外的起始间隔0-1.195。