我有以下参数:
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
如何将整数保持为整数类型?
答案 0 :(得分:4)
之所以这样做,是因为DataFrame
中pandas
的每一列基本上都是numpy
数组。数组的元素必须都是相同的类型,否则会失去很多计算优势。因此,如果列中的一个元素是浮点数,它将自动将所有元素转换为浮点数。
您可以手动控制数组的dtype
,也可以手动控制DataFrame
,并将其设置为int
,但在这种情况下您将丢失浮点数。
但是,在您的示例中,包含int的列的元素实际上属于int64
类型(您可以通过运行hyperParamSpace.par2.dtype
来验证它),但是当您使用iloc
切片时,它将它们转换为输出中的浮点数,因为原理相同:创建一个数组,其中所有元素都具有相同的类型。
为避免转化,您可以做的是将dtype
的{{1}}指定为DataFrame
:
object
这会大大降低效率,但由于您的参数表很小,因此不应该出现问题。