Python 使用NaN向下舍入dataframe列中的值

Python 使用NaN向下舍入dataframe列中的值,python,pandas,dataframe,rounding,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]}) 我想创建一个只

我有一个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.ix[10,'measure'] = np.nan
缺少此值会导致.astype(int)方法失败,原因是:

ValueError: Cannot convert NA to integer
我想我可以把数据列中的浮动取整。但是,.round(0)函数将舍入到最接近的整数(更高或更低),而不是向下舍入。我找不到与“.floor()”等效的函数,该函数将作用于数据帧的列


有什么建议吗?

你可以申请
numpy.floor

import numpy as np

tempDF['int_measure'] = tempDF['measure'].apply(np.floor)

    id  measure  int_measure
0   12      3.2            3
1   12      4.2            4
2   12      6.8            6
...
9   51      2.1            2
10  51      NaN          NaN
11  51      3.5            3
...
19  91      7.3            7
您也可以尝试:

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

然而,使用
np.floor
速度更快。

这里的答案非常陈旧,并且从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)

对于一个特定的列。

NaN
的位置,将在
int\u measure
列中存储什么值?我确实搜索了一个解决方案,但没有找到。非常感谢您的快速响应。您好,我知道这是一个旧线程,但我遇到了一个问题,我试图做同样的事情,但与天花板功能。我试图将数据帧的整数舍入到最接近的整数。我这样做了:df['miles'].apply(np.ceil),它返回:AttributeError:'numpy.ndarray'对象没有属性'ceil'FYI,如果有人偶然发现我的问题有类似的问题。。。问题是我的系列中有一些NaN值。我使用np.nan_将它们转换为_num,并修复了它。
df.iloc[:,0] = df.iloc[:,0].astype(int)