Kashif
Kashif

Reputation: 3327

Convert dataframe of floats to integers in pandas?

How do I convert every numeric element of my pandas dataframe to an integer? I have not seen any documentation online for how to do so, which is surprising given Pandas is so popular...

Upvotes: 0

Views: 687

Answers (3)

Emad
Emad

Reputation: 71

Try this:

column_types = dict(df.dtypes)
for column in df.columns:
    if column_types[column] == 'float64':
        df[column] = df[column].astype('int')
        df[column] = df[column].apply(lambda x: int(x))

Upvotes: 1

sophros
sophros

Reputation: 16660

You can use apply for this purpose:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':np.arange(1.0, 20.0), 'B':np.arange(101.0, 120.0)})
print(df)
       A      B
0    1.0  101.0
1    2.0  102.0
2    3.0  103.0
3    4.0  104.0
4    5.0  105.0
5    6.0  106.0
6    7.0  107.0
7    8.0  108.0
8    9.0  109.0
9   10.0  110.0
10  11.0  111.0
11  12.0  112.0
12  13.0  113.0
13  14.0  114.0
14  15.0  115.0
15  16.0  116.0
16  17.0  117.0
17  18.0  118.0
18  19.0  119.0

df2 = df.apply(lambda a: [int(b) for b in a])
print(df2)

     A    B
0    1  101
1    2  102
2    3  103
3    4  104
4    5  105
5    6  106
6    7  107
7    8  108
8    9  109
9   10  110
10  11  111
11  12  112
12  13  113
13  14  114
14  15  115
15  16  116
16  17  117
17  18  118
18  19  119

A better approach is to change the type at the level of series:

for col in df.columns:
    if df[col].dtype == np.float64:
        df[col] = df[col].astype('int')

print(df)

     A    B
0    1  101
1    2  102
2    3  103
3    4  104
4    5  105
5    6  106
6    7  107
7    8  108
8    9  109
9   10  110
10  11  111
11  12  112
12  13  113
13  14  114
14  15  115
15  16  116
16  17  117
17  18  118
18  19  119

Upvotes: 1

rafaelc
rafaelc

Reputation: 59274

If you have a data frame of ints, simply use astype directly.

df.astype(int)

If not, use select_dtypes first to select numeric columns.

df.select_dtypes(np.number).astype(int)

df = pd.DataFrame({'col1': [1.,2.,3.,4.], 'col2': [10.,20.,30.,40.]})

   col1  col2
0   1.0  10.0
1   2.0  20.0
2   3.0  30.0
3   4.0  40.0

>>> df.astype(int)

   col1  col2
0     1    10
1     2    20
2     3    30
3     4    40

Upvotes: 3

Related Questions