Convert floats to ints in Pandas?
To modify the float output do this:
df= pd.DataFrame(range(5), columns=['a'])df.a = df.a.astype(float)dfOut[33]: a0 0.00000001 1.00000002 2.00000003 3.00000004 4.0000000pd.options.display.float_format = '{:,.0f}'.formatdfOut[35]: a0 01 12 23 34 4
Use the pandas.DataFrame.astype(<type>)
function to manipulate column dtypes.
>>> df = pd.DataFrame(np.random.rand(3,4), columns=list("ABCD"))>>> df A B C D0 0.542447 0.949988 0.669239 0.8798871 0.068542 0.757775 0.891903 0.3845422 0.021274 0.587504 0.180426 0.574300>>> df[list("ABCD")] = df[list("ABCD")].astype(int)>>> df A B C D0 0 0 0 01 0 0 0 02 0 0 0 0
EDIT:
To handle missing values:
>>> df A B C D0 0.475103 0.355453 0.66 0.8693361 0.260395 0.200287 NaN 0.6170242 0.517692 0.735613 0.18 0.657106>>> df[list("ABCD")] = df[list("ABCD")].fillna(0.0).astype(int)>>> df A B C D0 0 0 0 01 0 0 0 02 0 0 0 0
Considering the following data frame:
>>> df = pd.DataFrame(10*np.random.rand(3, 4), columns=list("ABCD"))>>> print(df)... A B C D... 0 8.362940 0.354027 1.916283 6.226750... 1 1.988232 9.003545 9.277504 8.522808... 2 1.141432 4.935593 2.700118 7.739108
Using a list of column names, change the type for multiple columns with applymap()
:
>>> cols = ['A', 'B']>>> df[cols] = df[cols].applymap(np.int64)>>> print(df)... A B C D... 0 8 0 1.916283 6.226750... 1 1 9 9.277504 8.522808... 2 1 4 2.700118 7.739108
Or for a single column with apply()
:
>>> df['C'] = df['C'].apply(np.int64)>>> print(df)... A B C D... 0 8 0 1 6.226750... 1 1 9 9 8.522808... 2 1 4 2 7.739108