熊猫值计数两次显示相同的垃圾箱

时间:2019-08-10 05:53:31

标签: python-3.x pandas

我是Python和Pandas的新手。

我有一个大型DataFrame,我正在其中运行value_counts来检查输出,如下所示:

df['Remaining'].value_counts().sort_index()

下面是输出,您可以看到50.0出现了两次,一次6817次,一次4次。我尝试在剩余df['Remaining'] == 50时导出out来查看差异,但实际上没有差异。我做错什么了吗?

-225.0        2
-200.0        4
-150.0       14
-125.0        7
-100.0      346
-75.0       202
-50.0      1343
-25.0       527
 0.0      61167
 25.0     10467
 50.0      6817
 50.0         4
 75.0      5358
 100.0     3428
 125.0     1626
 150.0      598
 175.0      334
 200.0      223
 225.0      102
 250.0       69
 275.0       13
 350.0        1
 375.0        4
 400.0        3
 425.0        2
Name: Remaining steps, dtype: int64

2 个答案:

答案 0 :(得分:3)

没有您的数据,我会尽力猜测。我认为这是精度问题。您的2个不同的50.0纸槽实际上可能具有不同的精度点值,并且打印输出未显示该值。让我们尝试一下这个示例

df = pd.DataFrame({'num': [-12.5, 50.00000000004, 50.0, -25.10, 50.0]} , dtype=float)
print(df)

In [23]: 
    num
0 -12.5
1  50.0
2  50.0
3 -25.1
4  50.0

打印仅显示取整值。让我们尝试value_counts。它显示2个与您的问题相同的50.0垃圾箱

df.num.value_counts().sort_index()

Out[27]:
-25.1    1
-12.5    1
 50.0    2
 50.0    1
Name: num, dtype: int64

让我们在round之前尝试value_counts

df.num.round(2).value_counts().sort_index()

Out[28]:
-25.1    1
-12.5    1
 50.0    3
Name: num, dtype: int64

因此,我想您可能在上述系列的round之前先致电value_counts,以查看其是否已解决。

答案 1 :(得分:0)

我可以自由使用@Andy L的示例数据框。

实现这一目标的一种快速肮脏的方法是。

>>> df = pd.DataFrame({'num': [-12.5, 50.00000000004, 50.0, -25.10, 50.0]} , dtype=float)
>>> df
    num
0 -12.5
1  50.0
2  50.0
3 -25.1
4  50.0

输出:

>>> df['num'].astype(str).value_counts()
50.0     3
-25.1    1
-12.5    1
Name: num, dtype: int64

如果它看起来是一个精度问题,则可以尝试设置。

正如我们在数据帧结构中看到的,50的精度点有所递减,在这里我们可以看到初始50.0的浮点精度发生两次,而另外一次则为50.00000000004 ,因此value_counts()将它们隔离为一个单独的bin。

>>> df.num.value_counts().keys()
Float64Index([50.0, -25.1, 50.00000000004, -12.5], dtype='float64')

正如我所说,所以我们可以设置要计数的精度点,如下所示。

>>> pd.set_option('precision', 0)

OR

>>> df['num'].map('{:,.2f}'.format).value_counts()
50.00     3
-12.50    1
-25.10    1
Name: num, dtype: int64

您可以看到熊猫开发人员@jeff From this SO thread about float precision

的解释。

希望这会有所帮助。