pandas rounding when converting float to integer pandas rounding when converting float to integer pandas pandas

pandas rounding when converting float to integer


You are right, astype(int) does a conversion toward zero:

‘integer’ or ‘signed’: smallest signed int dtype

from pandas.to_numeric documentation (which is linked from astype() for numeric conversions).

If you want to round, you need to do a float round, and then convert to int:

df.round(0).astype(int)

Use other rounding functions, according your needs.


If I understand right you could just perform the rounding operation followed by converting it to an integer?

s1 = pd.Series([1.2,2.9])s1 = s1.round().astype(int)

Which gives the output:

0    11    3dtype: int32


In case the data frame contains both, numeric and non-numeric values and you only want to touch numeric fields:

df = df.applymap(lambda x: int(round(x, 0)) if isinstance(x, (int, float)) else x)