Python:防止Pandas Series中的值四舍五入为整数

Jim*_*im 7 python rounding pandas

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

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

Ale*_*ley 5

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

最简单的方法是使用所需的数据类型创建Series:

series = pd.Series(range(20), dtype=float)
Run Code Online (Sandbox Code Playgroud)

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

series = series.astype(float)
Run Code Online (Sandbox Code Playgroud)

然后,您可以将浮动值设置为系列.


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

series[10] = np.nan # series is promoted to float64 type
Run Code Online (Sandbox Code Playgroud)

object如果您尝试设置字符串值,Pandas还会将Series推广为数据类型:

series[5] = 'some string' # series is promoted to object type
Run Code Online (Sandbox Code Playgroud)