避免自动转换为浮动python

时间:2017-01-20 13:13:53

标签: python pandas

我有以下参数:

param_grid = dict(par1 = [0.1, 1.1, 1.2], 
                  par2 = [3, 4, 5], 
                  par3 = [6, 7, 8])   

我想创建一个包含所有可能参数组合的表。我尝试使用以下代码

hyperParamSpace = pd.DataFrame([row for row in itertools.product(*param_grid.values())], 
                               columns=param_grid.keys())

当我第一次使用时 hyperParamSpace.iloc[1]它会转换浮点数中的所有参数:

par3    6.0
par2    3.0
par1    1.1
Name: 1, dtype: float64

如何将整数保持为整数类型?

1 个答案:

答案 0 :(得分:4)

之所以这样做,是因为DataFramepandas的每一列基本上都是numpy数组。数组的元素必须都是相同的类型,否则会失去很多计算优势。因此,如果列中的一个元素是浮点数,它将自动将所有元素转换为浮点数。

您可以手动控制数组的dtype,也可以手动控制DataFrame,并将其设置为int,但在这种情况下您将丢失浮点数。

但是,在您的示例中,包含int的列的元素实际上属于int64类型(您可以通过运行hyperParamSpace.par2.dtype来验证它),但是当您使用iloc切片时,它将它们转换为输出中的浮点数,因为原理相同:创建一个数组,其中所有元素都具有相同的类型。

为避免转化,您可以做的是将dtype的{​​{1}}指定为DataFrame

object

这会大大降低效率,但由于您的参数表很小,因此不应该出现问题。