Python:防止 Pandas 系列中的值四舍五入为整数
Python: prevent values in Pandas Series rounding to integer
我试图在系列上设置一些值,但它会自动舍入为整数,我应该怎么做才能防止这种情况发生?
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
series
是使用 int64
数据类型自动创建的(因为 range(20)
仅包含整数)。当您尝试将此系列的值设置为浮点数时,这些值将被截断为整数,因为 Pandas 不会自动提升系列的数据类型。*
解决此问题的最简单方法是创建具有所需数据类型的系列:
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
我试图在系列上设置一些值,但它会自动舍入为整数,我应该怎么做才能防止这种情况发生?
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
series
是使用 int64
数据类型自动创建的(因为 range(20)
仅包含整数)。当您尝试将此系列的值设置为浮点数时,这些值将被截断为整数,因为 Pandas 不会自动提升系列的数据类型。*
解决此问题的最简单方法是创建具有所需数据类型的系列:
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