la fonction pandas read_csv () lit un fichier .csv. Sa documentation est ici
Selon la documentation, nous savons:
dtype: Saisissez le nom ou le dict de la colonne -> type, par défaut Aucun Type de données pour les données ou les colonnes. Par exemple. {‘A’: np.float64, ‘b’: np.int32} (non pris en charge avec engine = ’python’)
et
convertisseurs: dict, par défaut Aucun Dict des fonctions de conversion des valeurs dans certaines colonnes. Les clés peuvent être des entiers ou des étiquettes de colonne
Lorsque j'utilise cette fonction, je peux appeler pandas.read_csv('file',dtype=object)
ou pandas.read_csv('file',converters=object)
. Évidemment, convertisseur, son nom peut dire que le type de données sera converti mais je me demande le cas de dtype?
La différence sémantique est que dtype
vous permet de spécifier comment traiter les valeurs, par exemple, sous forme numérique ou de type chaîne.
Les convertisseurs vous permettent d'analyser vos données d'entrée pour les convertir en un dtype souhaité à l'aide d'une fonction de conversion, par exemple, en analysant une valeur de chaîne en datetime ou en un autre dtype souhaité.
Ici, nous voyons que pandas essaie de flairer les types:
In [2]:
df = pd.read_csv(io.StringIO(t))
t="""int,float,date,str
001,3.31,2015/01/01,005"""
df = pd.read_csv(io.StringIO(t))
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 0 to 0
Data columns (total 4 columns):
int 1 non-null int64
float 1 non-null float64
date 1 non-null object
str 1 non-null int64
dtypes: float64(1), int64(2), object(1)
memory usage: 40.0+ bytes
Vous pouvez voir ci-dessus que 001
et 005
sont traités comme int64
mais la chaîne de date reste str
.
Si nous disons que tout est object
, alors essentiellement tout est str
:
In [3]:
df = pd.read_csv(io.StringIO(t), dtype=object).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 0 to 0
Data columns (total 4 columns):
int 1 non-null object
float 1 non-null object
date 1 non-null object
str 1 non-null object
dtypes: object(4)
memory usage: 40.0+ bytes
Ici, nous forçons la colonne int
à str
et disons à parse_dates
pour utiliser le date_parser pour analyser la colonne de date:
In [6]:
pd.read_csv(io.StringIO(t), dtype={'int':'object'}, parse_dates=['date']).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 0 to 0
Data columns (total 4 columns):
int 1 non-null object
float 1 non-null float64
date 1 non-null datetime64[ns]
str 1 non-null int64
dtypes: datetime64[ns](1), float64(1), int64(1), object(1)
memory usage: 40.0+ bytes
De même, nous aurions pu passer le to_datetime
fonction pour convertir les dates:
In [5]:
pd.read_csv(io.StringIO(t), converters={'date':pd.to_datetime}).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 0 to 0
Data columns (total 4 columns):
int 1 non-null int64
float 1 non-null float64
date 1 non-null datetime64[ns]
str 1 non-null int64
dtypes: datetime64[ns](1), float64(1), int64(2)
memory usage: 40.0 bytes