使用NaN舍入Pandas数据帧列中的值

时间:2016-03-08 17:24:43

标签: python pandas dataframe rounding

我有一个Pandas数据框,其中包含一列float64值:

tempDF = pd.DataFrame({ 'id': [12,12,12,12,45,45,45,51,51,51,51,51,51,76,76,76,91,91,91,91],
                        'measure': [3.2,4.2,6.8,5.6,3.1,4.8,8.8,3.0,1.9,2.1,2.4,3.5,4.2,5.2,4.3,3.6,5.2,7.1,6.5,7.3]})

我想创建一个只包含整数部分的新列。我的第一个想法是使用.astype(int):

tempDF['int_measure'] = tempDF['measure'].astype(int)

这样可以正常工作,但作为额外的复杂功能,我所拥有的列包含缺失值:

tempDF.ix[10,'measure'] = np.nan

此缺失值导致.astype(int)方法失败,并显示:

ValueError: Cannot convert NA to integer

我以为我可以在数据列中舍入浮点数。但是,.round(0)函数将舍入到最接近的整数(更高或更低)而不是向下舍入。我找不到相当于" .floor()"的功能。这将作用于Pandas数据帧的一列。

有什么建议吗?

3 个答案:

答案 0 :(得分:9)

您可以申请var dd = new DropDown($('.custom-dropdown'));;

numpy.floor

答案 1 :(得分:3)

您也可以尝试:

df.apply(lambda s: s // 1)

然而,使用np.floor会更快。

答案 2 :(得分:0)

这里的答案是过时的,从熊猫0.25.2(也许更早)开始,错误

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

会是

df.iloc[:,0] = df.iloc[:,0].astype(int)

针对一列。