Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert all elements in float Series to integer

I have a column, having float values,in a dataframe (so I am calling this column as Float series). I want to convert all the values to integer or just round it up so that there are no decimals.

Let us say the dataframe is df and the column is a, I tried this :

df['a'] = round(df['a']) 

I got an error saying this method can't be applied to a Series, only applicable to individual values.

Next I tried this :

for obj in df['a']: 
   obj =int(round(obj))

After this I printed df but there was no change. Where am I going wrong?

like image 392
Data Enthusiast Avatar asked Sep 15 '25 15:09

Data Enthusiast


1 Answers

round won't work as it's being called on a pandas Series which is array-like rather than a scalar value, there is the built in method pd.Series.round to operate on the whole Series array after which you can change the dtype using astype:

In [43]:
df = pd.DataFrame({'a':np.random.randn(5)})
df['a'] = df['a'] * 100
df

Out[43]:
            a
0   -4.489462
1 -133.556951
2 -136.397189
3 -106.993288
4  -89.820355

In [45]:
df['a'] = df['a'].round(0).astype(int)
df

Out[45]:
     a
0   -4
1 -134
2 -136
3 -107
4  -90

Also it's unnecessary to iterate over the rows when there are vectorised methods available

Also this:

for obj in df['a']: 
   obj =int(round(obj))

Does not mutate the individual cell in the Series, it's operating on a copy of the value which is why the df is not mutated.

like image 111
EdChum Avatar answered Sep 17 '25 07:09

EdChum