【问题标题】:Python: prevent values in Pandas Series rounding to integerPython:防止熊猫系列中的值四舍五入为整数
【发布时间】:2015-07-08 12:31:44
【问题描述】:

我试图在 Series 上设置一些值,但它会自动舍入为整数,我应该怎么做才能防止这种情况发生?

from __future__ import division
import pandas as pd

In [100]: series = pd.Series(range(20))

In [101]: series[10]
Out[101]: 10

In [102]: series[10] = 0.05

In [103]: series[10]
Out[103]: 0

In [104]: series[10] = 2.5

In [105]: series[10]
Out[105]: 2

In [106]: series[10] = float(2.5)

In [107]: series[10]
Out[107]: 2

In [108]: float(2/3)
Out[108]: 0.6666666666666666

In [109]: series[10] = float(2/3)

In [110]: series[10]
Out[110]: 0

【问题讨论】:

  • pandas.Series documentation - 作为已经提到的答案,您似乎想要使用dtype=(type)
  • 谢谢克里斯!我应该在询问之前阅读文档。

标签: python pandas rounding


【解决方案1】:

series 是使用int64 数据类型自动创建的(因为range(20) 仅包含整数)。当您尝试将此 Series 的值设置为浮点数时,这些值将被截断为整数,因为 Pandas 不会自动提升 Series 的数据类型。*

解决此问题的最简单方法是创建具有所需数据类型的系列:

series = pd.Series(range(20), dtype=float)

或者您可以在创建整数系列后强制转换它:

series = series.astype(float)

然后您就可以为系列设置浮点值了。


* 这有点类似于 NumPy 对数组的行为。但是,与 NumPy 不同的是,如果您尝试设置 nan 值,Pandas 将 Series 的数据类型从整数提升为浮点类型:

series[10] = np.nan # series is promoted to float64 type

如果您尝试设置字符串值,Pandas 还将将该系列提升为 object 数据类型:

series[5] = 'some string' # series is promoted to object type

【讨论】:

  • @Jim:很高兴它有帮助!
猜你喜欢
  • 2018-12-20
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
相关资源
最近更新 更多