Modifica il tipo di dati delle colonne in Pandas

  1. Metodo to_numeric per convertire le colonne in valori numerici in Pandas
  2. Metodo astype() per convertire un tipo in qualsiasi altro tipo di dati
  3. Metodo infer_objects() per convertire il tipo di dati delle colonne in un tipo più specifico

Introdurremo il metodo per cambiare il tipo di dati delle colonne in Pandas dataframe e opzioni come to_numaric, as_type e infer_objects. Discuteremo anche come usare l’opzione downcasting con to_numaric.

Metodo to_numeric per convertire le colonne in valori numerici in Pandas

to_numeric() è il modo migliore per convertire una o più colonne di un DataFrame in valori numerici. Proverà anche a cambiare gli oggetti non numerici (come le stringhe) in numeri interi o numeri in virgola mobile a seconda dei casi. to_numeric() l’input può essere una Series o una colonna di un DataFrame. Se alcuni valori non possono essere convertiti in un tipo numerico, to_numeric() ci permette di forzare i valori non numerici ad essere NaN.

Codici di esempio:

# python 3.x
import pandas as pd
s = pd.Series([
    '12', '12', '4.7', 'asad', '3.0'])
print(s)
print('------------------------------')
print(pd.to_numeric(s, errors='coerce'))

Produzione:

0      12
1      12
2     4.7
3    asad
4     3.0
dtype: object
------------------------------
0    12.0
1    12.0
2     4.7
3     NaN
4     3.0
dtype: float64

to_numeric() ci darà un dtype int64 o float64 per impostazione predefinita. Possiamo usare un’opzione per eseguire il cast su integer, signed, unsigned o float:

# python 3.x
import pandas as pd
s = pd.Series([-3, 1, -5])
print(s)
print(pd.to_numeric(s, downcast='integer'))

Produzione:

0   -3
1    1
2   -5
dtype: int64
0   -3
1    1
2   -5
dtype: int8

Metodo astype() per convertire un tipo in qualsiasi altro tipo di dati

Il metodo astype() ci permette di essere espliciti riguardo al dtype che vogliamo convertire. Possiamo convertire un tipo di dati in un altro passando il parametro all’interno del metodo astype().

Codici di esempio:

# python 3.x
import pandas as pd
c = [['x', '1.23', '14.2'], 
     ['y', '20', '0.11'],
     ['z', '3', '10']]
df = pd.DataFrame(
    c, 
    columns=['first', 'second', 'third'])
print(df)
df[['second', 'third']] = 
df[['second', 'third']].astype(float)
print('Converting..................')
print('............................')
print(df)

Produzione:

  first second third
0     x   1.23  14.2
1     y     20  0.11
2     z      3    10
Converting..................
............................
  first  second  third
0     x    1.23  14.20
1     y   20.00   0.11
2     z    3.00  10.00

Metodo infer_objects() per convertire il tipo di dati delle colonne in un tipo più specifico

Il metodo infer_objects() introdotto dalla versione 0.21.0 del pandas per convertire le colonne di un dataFrame in un tipo di dati più specifico (conversioni soft).

Codici di esempio:

# python 3.x
import pandas as pd
df = pd.DataFrame({
    'a': [3, 12, 5], 
    'b': [3.0,2.6,1.1]}, 
     dtype='object')
print(df.dtypes)
df = df.infer_objects()
print('Infering..................')
print('............................')
print(df.dtypes)

Produzione:

a    object
b    object
dtype: object
Infering..................
............................
a      int64
b    float64
dtype: object

Articolo correlato - Pandas Data Type

  • Pandas converte la stringa in tipo numerico