Floor or ceiling of a pandas series in python?

I am the OP, but I tried this and it worked:

np.floor(series)

You can use NumPy's built in methods to do this: np.ceil(series) or np.floor(series).

Both return a Series object (not an array) so the index information is preserved.


With pd.Series.clip, you can set a floor via clip(lower=x) or ceiling via clip(upper=x):

s = pd.Series([-1, 0, -5, 3])
    
print(s.clip(lower=0))
# 0    0
# 1    0
# 2    0
# 3    3
# dtype: int64
    
print(s.clip(upper=0))
# 0   -1
# 1    0
# 2   -5
# 3    0
# dtype: int64

pd.Series.clip allows generalised functionality, e.g. applying and flooring a ceiling simultaneously, e.g. s.clip(-1, 1)

NOTE: Answer originally referred to clip_lower / clip_upper which were removed in pandas 1.0.0.


UPDATE: THIS ANSWER IS WRONG, DO NOT DO THIS

Explanation: using Series.apply() with a native vectorized Numpy function makes no sense in most cases as it will run the Numpy function in a Python loop, leading to much worse performance. You'd be much better off using np.floor(series) directly, as suggested by several other answers.

You could do something like this using NumPy's floor, for instance, with a dataframe:

floored_data = data.apply(np.floor)

Can't test it right now but an actual and working solution might not be far from it.