๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.S๐โ๐ซโ๐ขโ๐โ๐ฌโ a seul un type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ), tandis que ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ peut avoir un type de donnรฉes diffรฉrent pour chaque colonne.
Vous pouvez prรฉciser ๐โ๐ญโ๐ฒโ๐ฉโ๐โ dans divers contextes, par exemple lors de la crรฉation d’un nouvel objet ร l’aide d’un constructeur ou lors de la lecture d’un fichier CSV. De plus, vous pouvez convertir un objet existant en un autre ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ร l’aide de la mรฉthode ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() .
- Liste des types de donnรฉes de base ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) dans pandas
- Type et chaรฎne ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ
- Type de donnรฉes de casting ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) avec ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ()
- Type de donnรฉes de casting de ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.S๐โ๐ซโ๐ขโ๐โ๐ฌโ
- Convertir le type de donnรฉes de toutes les colonnes de ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ
- Convertir le type de donnรฉes de n’importe quelle colonne de ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ individuellement
- Spรฉcifiez le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) lors de la lecture de fichiers CSV avec ๐ซโ๐โ๐โ๐โ_๐โ๐ฌโ๐ฏโ()
- Conversions de type implicites
Consultez l’article suivant sur la faรงon d’extraire des colonnes par ๐โ๐ญโ๐ฒโ๐ฉโ๐โ .
Consultez l’article suivant sur ๐โ๐ญโ๐ฒโ๐ฉโ๐โ et ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() dans NumPy.
Veuillez noter que l’exemple de code utilisรฉ dans cet article est basรฉ sur la version 2.0.3 de pandas et que le comportement peut varier selon les diffรฉrentes versions.
import pandas as pd import numpy as np print(pd.__version__) # 2.0.3
Liste des types de donnรฉes de base ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) dans pandas
Voici une liste des types de donnรฉes de base ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) dans pandas.
| ๐โ๐ญโ๐ฒโ๐ฉโ๐โ | code de caractรจre | description |
|---|---|---|
| 8 | ๐ขโ1 | Entier signรฉ sur 8 bits |
| 16 janvier | ๐ขโ2 | Entier signรฉ de 16 bits |
| 32 | ๐ขโ4 | Entier signรฉ 32 bits |
| 64 ans | ๐ขโ8 | Entier signรฉ de 64 bits |
| 8 septembre | ๐ฎโ1 | Entier non signรฉ de 8 bits |
| 16 janvier | ๐ฎโ2 | Entier non signรฉ de 16 bits |
| ๐ฎโ๐ขโ๐งโ๐ญโ32 | ๐ฎโ4 | Entier non signรฉ de 32 bits |
| ๐ฎโ๐ขโ๐งโ๐ญโ64 | ๐ฎโ8 | Entier non signรฉ de 64 bits |
| 16 janvier | ๐โ2 | Nombre ร virgule flottante de 16 bits |
| 32 ans et plus | ๐โ4 | Nombre ร virgule flottante 32 bits |
| 64 | ๐โ8 | Nombre ร virgule flottante 64 bits |
| 128 | ๐โ16 | Nombre ร virgule flottante de 128 bits |
| ๐๐จ๐ฆ๐ฉ๐ฅ๐๐ง๐ญ 64 | ๐โ8 | Nombre ร virgule flottante complexe de 64 bits |
| ๐๐จ๐ฆ๐ฉ๐ฅ๐๐ง๐ญ 128 | ๐โ16 | Nombre ร virgule flottante complexe de 128 bits |
| ๐๐จ๐ฆ๐ฉ๐ฅ๐๐ง๐ญ 256 | 32 | Nombre ร virgule flottante complexe de 256 bits |
| ๐โ๐จ๐ง๐ฌ๐ข๐๐ง๐ญ ๐ฅ๐ | ? | Boolรฉen ( T๐ซโ๐ฎโ๐โ ou F๐โ๐ฅโ๐ฌโ๐โ ) |
| ๐ฎ๐ง๐๐ง๐ฌ๐๐ง๐ญ๐๐ง๐ญ๐๐ง๐ญ๐๐ง๐ญ๐๐ง๐ญ | Tu | Chaรฎne Unicode |
| ๐จ๐ฎ๐ฌ๐ฌ๐ข๐๐ง ๐ฉ๐ซ๐ข๐๐ง๐ญ๐๐ง๐ญ | O | Objets Python |
Notez que les nombres dans ๐โ๐ญโ๐ฒโ๐ฉโ๐โ reprรฉsentent des bits, tandis que ceux dans les codes de caractรจres reprรฉsentent des octets. Le code de caractรจre pour le type ๐โ๐จโ๐จโ๐ฅโ est ? . Cela ne signifie pas inconnu ; plutรดt, ? est traduit.
Vous pouvez dรฉfinir ๐โ๐ญโ๐ฒโ๐ฉโ๐โ de diffรฉrentes maniรจres. Par exemple, l’une des reprรฉsentations suivantes peut รชtre utilisรฉe pour ๐โ๐ฅโ๐จโ๐โ๐ญโ64 :
- ๐งโ๐ฉโ.๐โ๐ฅโ๐จโ๐โ๐ญโ64
- ยซ 64 ans ยป
- ยซ 8 ยป
s = pd.Series([0, 1, 2], dtype=np.float64) print(s.dtype) # float64 s = pd.Series([0, 1, 2], dtype='float64') print(s.dtype) # float64 s = pd.Series([0, 1, 2], dtype='f8') print(s.dtype) # float64
Vous pouvez รฉgalement dรฉfinir des types de donnรฉes ร l’aide de types Python tels que ๐ขโ๐งโ๐ญโ , ๐โ๐ฅโ๐จโ๐โ๐ญโ ou ๐ฌโ๐ญโ๐ซโ , sans prรฉciser de prรฉcision en bits.
Dans de tels cas, le type est converti en son รฉquivalent ๐โ๐ญโ๐ฒโ๐ฉโ๐โ . Voici des exemples dans Python3, environnement 64 bits. Bien que ๐ฎโ๐ขโ๐งโ๐ญโ ne soit pas un type Python natif, il est inclus dans le tableau pour plus de commoditรฉ.
| Tapez Python | Exemple d’รฉquivalent ๐โ๐ญโ๐ฒโ๐ฉโ๐โ |
|---|---|
| ๐ข๐ง๐๐ง๐ญ๐ | 64 ans |
| ๐๐๐ข๐ฌ๐ฌ๐ข๐๐ง ๐๐ง๐ญ๐๐ง๐ญ๐ | 64 |
| D’accord… | ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ (Chaque รฉlรฉment est ๐ฌโ๐ญโ๐ซโ ) |
| ( ๐ฎ๐๐ง ๐ฉ๐ซ๐ข๐๐ง๐ฌ ) | ๐ฎโ๐ขโ๐งโ๐ญโ64 |
Vous pouvez utiliser des types tels que ๐ขโ๐งโ๐ญโ , ๐โ๐ฅโ๐จโ๐โ๐ญโ ou les chaรฎnes ‘๐ขโ๐งโ๐ญโ’ et ‘๐โ๐ฅโ๐จโ๐โ๐ญโ’ . Cependant, vous ne pouvez pas utiliser ๐ฎโ๐ขโ๐งโ๐ญโ car ce n’est pas un type Python natif.
s = pd.Series([0, 1, 2], dtype='float') print(s.dtype) # float64 s = pd.Series([0, 1, 2], dtype=float) print(s.dtype) # float64 s = pd.Series([0, 1, 2], dtype='uint') print(s.dtype) # uint64
Vous pouvez vรฉrifier la plage de valeurs possibles (valeurs minimales et maximales) pour les types de nombres entiers et ร virgule flottante avec ๐งโ๐ฉโ.๐ขโ๐ขโ๐งโ๐โ๐จโ() et ๐งโ๐ฉโ.๐โ๐ขโ๐งโ๐โ๐จโ() .
Les types de donnรฉes dรฉcrits ici sont principalement exploitรฉs sur NumPy, mais pandas a รฉtendu certains de ses propres types de donnรฉes.
Type et chaรฎne ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ
Cette section explique le type ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ et la chaรฎne ( ๐ฌโ๐ญโ๐ซโ ).
Notez que S๐ญโ๐ซโ๐ขโ๐งโ๐ โD๐ญโ๐ฒโ๐ฉโ๐โ a รฉtรฉ introduit dans la version 1.0.0 de pandas comme type de donnรฉes pour les chaรฎnes. Ce type pourrait devenir la norme ร l’avenir, mais il n’est pas mentionnรฉ ici. Consultez la documentation officielle pour plus de dรฉtails.
Le type de donnรฉes spรฉcial : ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ
Le type ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ est un type de donnรฉes spรฉcial qui peut stocker des rรฉfรฉrences ร n’importe quel objet Python. Chaque รฉlรฉment peut รชtre d’un type diffรฉrent.
Le type de donnรฉes pour les colonnes S๐โ๐ซโ๐ขโ๐โ๐ฌโ et D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ contenant des chaรฎnes est ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ . Cependant, chaque รฉlรฉment peut avoir son propre type distinct, ce qui signifie que tous les รฉlรฉments ne doivent pas nรฉcessairement รชtre des chaรฎnes.
Voici quelques exemples. La fonction intรฉgrรฉe ๐ญโ๐ฒโ๐ฉโ๐โ() est appliquรฉe ร chaque รฉlรฉment ร l’aide de la mรฉthode ๐ฆโ๐โ๐ฉโ() pour vรฉrifier son type. ๐งโ๐ฉโ.๐งโ๐โ๐งโ reprรฉsente une valeur manquante.
- pandas : appliquer des fonctions aux valeurs, lignes, colonnes avec map(), apply()
- Obtenir et vรฉrifier le type d’un objet en Python : type(), isinstance()
- Valeurs manquantes dans pandas (nan, None, pd.NA)
s_object = pd.Series([0, 'abcde', np.nan]) print(s_object) # 0 0 # 1 abcde # 2 NaN # dtype: object print(s_object.map(type)) # 0 <class 'int'> # 1 <class 'str'> # 2 <class 'float'> # dtype: object
Si ๐ฌโ๐ญโ๐ซโ est spรฉcifiรฉ dans la mรฉthode ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() (voir ci-dessous pour plus de dรฉtails), tous les รฉlรฉments, y compris N๐โN , sont convertis en ๐ฌโ๐ญโ๐ซโ . Le ๐โ๐ญโ๐ฒโ๐ฉโ๐โ reste sous la forme ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ .
s_str_astype = s_object.astype(str) print(s_str_astype) # 0 0 # 1 abcde # 2 nan # dtype: object print(s_str_astype.map(type)) # 0 <class 'str'> # 1 <class 'str'> # 2 <class 'str'> # dtype: object
Si ๐ฌโ๐ญโ๐ซโ est spรฉcifiรฉ dans l’argument ๐โ๐ญโ๐ฒโ๐ฉโ๐โ du constructeur, N๐โN reste ๐โ๐ฅโ๐จโ๐โ๐ญโ . Notez que, dans la version 0.22.0 , N๐โN a รฉtรฉ converti en ๐ฌโ๐ญโ๐ซโ .
s_str_constructor = pd.Series([0, 'abcde', np.nan], dtype=str) print(s_str_constructor) # 0 0 # 1 abcde # 2 NaN # dtype: object print(s_str_constructor.map(type)) # 0 <class 'str'> # 1 <class 'str'> # 2 <class 'float'> # dtype: object
Remarque : mรฉthodes de chaรฎne
Notez que mรชme lorsque ๐โ๐ญโ๐ฒโ๐ฉโ๐โ est ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ , le rรฉsultat des mรฉthodes de chaรฎne (accessibles via l’accesseur ๐ฌโ๐ญโ๐ซโ ) peut diffรฉrer en fonction du type de chaque รฉlรฉment.
Par exemple, en applique ๐ฌโ๐ญโ๐ซโ.๐ฅโ๐โ๐งโ() , qui renvoie le nombre de caractรจres, un รฉlรฉment de type renvoie numรฉrique N๐โN .
s_object = pd.Series([0, 'abcde', np.nan]) print(s_object) # 0 0 # 1 abcde # 2 NaN # dtype: object print(s_object.str.len()) # 0 NaN # 1 5.0 # 2 NaN # dtype: float64
Si le rรฉsultat de la mรฉthode chaรฎne de inclut N๐โN , cela indique que tous les รฉlรฉments ne sont peut-รชtre pas de type ๐ฌโ๐ญโ๐ซโ , mรชme si le type de donnรฉes de la colonne est ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ . Dans de tels cas, vous pouvez appliquer ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ(๐ฌโ๐ญโ๐ซโ) avant d’utiliser la mรฉthode de chaรฎne.
s_str_astype = s_object.astype(str) print(s_str_astype) # 0 0 # 1 abcde # 2 nan # dtype: object print(s_str_astype.str.len()) # 0 1 # 1 5 # 2 3 # dtype: int64
Voir รฉgalement les articles suivants pour les mรฉthodes de chaรฎne.
- pandas : gรฉrer les chaรฎnes (remplacer, supprimer, conversion de casse, etc.)
- pandas : extraire des lignes contenant des chaรฎnes spรฉcifiques d’un DataFrame
- pandas : diviser les colonnes de chaรฎnes par des dรฉlimiteurs ou des expressions rรฉguliรจres
Remarque : N๐โN
Vous pouvez dรฉterminer la valeur manquante N๐โN avec ๐ขโ๐ฌโ๐งโ๐ฎโ๐ฅโ๐ฅโ() ou la supprimer avec ๐โ๐ซโ๐จโ๐ฉโ๐งโ๐โ() .
- pandas : dรฉtecter et compter les NaN (valeurs manquantes) avec isnull(), isna()
- pandas : supprime NaN (valeurs manquantes) avec dropna()
s_object = pd.Series([0, 'abcde', np.nan]) print(s_object) # 0 0 # 1 abcde # 2 NaN # dtype: object print(s_object.map(type)) # 0 <class 'int'> # 1 <class 'str'> # 2 <class 'float'> # dtype: object print(s_object.isnull()) # 0 False # 1 False # 2 True # dtype: bool print(s_object.dropna()) # 0 0 # 1 abcde # dtype: object
Notez que s’il est converti en chaรฎne ( ๐ฌโ๐ญโ๐ซโ ), N๐โN devient la chaรฎne ‘๐งโ๐โ๐งโ’ et n’est pas traitรฉ comme une valeur manquante.
s_str_astype = s_object.astype(str) print(s_str_astype) # 0 0 # 1 abcde # 2 nan # dtype: object print(s_str_astype.map(type)) # 0 <class 'str'> # 1 <class 'str'> # 2 <class 'str'> # dtype: object print(s_str_astype.isnull()) # 0 False # 1 False # 2 False # dtype: bool print(s_str_astype.dropna()) # 0 0 # 1 abcde # 2 nan # dtype: object
Vous pouvez le traiter comme une valeur manquante avant le casting, ou remplacer la chaรฎne ‘๐งโ๐โ๐งโ’ par N๐โN en utilisant ๐ซโ๐โ๐ฉโ๐ฅโ๐โ๐โ๐โ() .
s_str_astype_nan = s_str_astype.replace('nan', np.nan) print(s_str_astype_nan) # 0 0 # 1 abcde # 2 NaN # dtype: object print(s_str_astype_nan.map(type)) # 0 <class 'str'> # 1 <class 'str'> # 2 <class 'float'> # dtype: object print(s_str_astype_nan.isnull()) # 0 False # 1 False # 2 True # dtype: bool
Type de donnรฉes de casting ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) avec ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ()
Vous pouvez convertir le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) avec la mรฉthode ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ .
- pandas.DataFrame.astype โ documentation de pandas 2.0.3
- pandas.Series.astype โ documentation de pandas 2.0.3
๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() renvoie un nouveau S๐โ๐ซโ๐ขโ๐โ๐ฌโ ou D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ avec le ๐โ๐ญโ๐ฒโ๐ฉโ๐โ spรฉcifiรฉ . L’objet d’origine n’est pas modifiรฉ.
Type de donnรฉes de casting de ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.S๐โ๐ซโ๐ขโ๐โ๐ฌโ
Vous pouvez prรฉciser le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) ร ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() .
s = pd.Series([1, 2, 3]) print(s) # 0 1 # 1 2 # 2 3 # dtype: int64 s_f = s.astype('float64') print(s_f) # 0 1.0 # 1 2.0 # 2 3.0 # dtype: float64
Comme mentionnรฉ ci-dessus, vous pouvez ๐โ๐ญโ๐ฒโ๐ฉโ๐โ sous diffรฉrentes formes.
s_f = s.astype('float') print(s_f.dtype) # float64 s_f = s.astype(float) print(s_f.dtype) # float64 s_f = s.astype('f8') print(s_f.dtype) # float64
Convertir le type de donnรฉes de toutes les colonnes de ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ
D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ possรจde le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) pour chaque colonne. Vous pouvez vรฉrifier chaque ๐โ๐ญโ๐ฒโ๐ฉโ๐โ avec l’attribut ๐โ๐ญโ๐ฒโ๐ฉโ๐โ๐ฌโ .
df = pd.DataFrame({'a': [11, 21, 31], 'b': [12, 22, 32], 'c': [13, 23, 33]}) print(df) # a b c # 0 11 12 13 # 1 21 22 23 # 2 31 32 33 print(df.dtypes) # a int64 # b int64 # c int64 # dtype: object
Si vous spรฉcifiez le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) sur ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() , les types de donnรฉes de toutes les colonnes sont modifiรฉs.
df_f = df.astype('float64') print(df_f) # a b c # 0 11.0 12.0 13.0 # 1 21.0 22.0 23.0 # 2 31.0 32.0 33.0 print(df_f.dtypes) # a float64 # b float64 # c float64 # dtype: object
Convertir le type de donnรฉes de n’importe quelle colonne de ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ individuellement
Vous pouvez modifier le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) de n’importe quelle colonne individuellement en spรฉcifiant un dictionnaire de {๐โ๐จโ๐ฅโ๐ฎโ๐ฆโ๐งโ ๐งโ๐โ๐ฆโ๐โ: ๐โ๐โ๐ญโ๐โ ๐ญโ๐ฒโ๐ฉโ๐โ} fr ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() .
df = pd.DataFrame({'a': [11, 21, 31], 'b': [12, 22, 32], 'c': [13, 23, 33]}) print(df) # a b c # 0 11 12 13 # 1 21 22 23 # 2 31 32 33 print(df.dtypes) # a int64 # b int64 # c int64 # dtype: object df_fcol = df.astype({'a': float}) print(df_fcol) # a b c # 0 11.0 12 13 # 1 21.0 22 23 # 2 31.0 32 33 print(df_fcol.dtypes) # a float64 # b int64 # c int64 # dtype: object df_fcol2 = df.astype({'a': 'float32', 'c': 'int8'}) print(df_fcol2) # a b c # 0 11.0 12 13 # 1 21.0 22 23 # 2 31.0 32 33 print(df_fcol2.dtypes) # a float32 # b int64 # c int8 # dtype: object
Spรฉcifiez le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) lors de la lecture de fichiers CSV avec ๐ซโ๐โ๐โ๐โ_๐โ๐ฌโ๐ฏโ()
Dans pandas, ๐ฉโ๐โ.๐ซโ๐โ๐โ๐โ_๐โ๐ฌโ๐ฏโ() est utilisรฉ pour lire les fichiers CSV, et vous pouvez dรฉfinir les types de donnรฉes ร l’aide de l’argument ๐โ๐ญโ๐ฒโ๐ฉโ๐โ .
Utilisez le fichier CSV suivant comme exemple.
,a,b,c,d< ONE,1,"001",100,x< TWO,2,"020",,y< THREE,3,"300",300,z/code>
Si l'argument ๐โ๐ญโ๐ฒโ๐ฉโ๐โ est omis, un type de donnรฉes est automatiquement choisi pour chaque colonne.
df = pd.read_csv('data/src/sample_header_index_dtype.csv', index_col=0) print(df) # a b c d # ONE 1 1 100.0 x # TWO 2 20 NaN y # THREE 3 300 300.0 z print(df.dtypes) # a int64 # b int64 # c float64 # d object # dtype: object
Spรฉcifiez le mรชme type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) pour toutes les colonnes
Si vous spรฉcifiez un type de donnรฉes pour l'argument ๐โ๐ญโ๐ฒโ๐ฉโ๐โ , toutes les colonnes sont converties dans ce type. Si certaines colonnes ne peuvent pas รชtre converties dans le type de donnรฉes spรฉcifiรฉ, une erreur sera gรฉnรฉrรฉe.
# pd.read_csv('data/src/sample_header_index_dtype.csv', # index_col=0, dtype=float) # ValueError: could not convert string to float: 'ONE'
Si vous dรฉfinissez ๐โ๐ญโ๐ฒโ๐ฉโ๐โ=๐ฌโ๐ญโ๐ซโ , toutes les colonnes sont converties en chaรฎnes. Cependant, dans ce cas, la valeur manquante ( N๐โN ) sera toujours de type ๐โ๐ฅโ๐จโ๐โ๐ญโ .
df_str = pd.read_csv('data/src/sample_header_index_dtype.csv', index_col=0, dtype=str) print(df_str) # a b c d # ONE 1 001 100 x # TWO 2 020 NaN y # THREE 3 300 300 z print(df_str.dtypes) # a object # b object # c object # d object # dtype: object print(df_str.applymap(type)) # a b c d # ONE <class 'str'> <class 'str'> <class 'str'> <class 'str'> # TWO <class 'str'> <class 'str'> <class 'float'> <class 'str'> # THREE <class 'str'> <class 'str'> <class 'str'> <class 'str'>
Si vous lisez le fichier sans prรฉcision ๐โ๐ญโ๐ฒโ๐ฉโ๐โ , puis le convertissez en ๐ฌโ๐ญโ๐ซโ avec ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() , N๐โN valeurs sont รฉgalement converties en chaรฎne '๐งโ๐โ๐งโ' .
df = pd.read_csv('data/src/sample_header_index_dtype.csv', index_col=0) print(df.astype(str)) # a b c d # ONE 1 1 100.0 x # TWO 2 20 nan y # THREE 3 300 300.0 z print(df.astype(str).applymap(type)) # a b c d # ONE <class 'str'> <class 'str'> <class 'str'> <class 'str'> # TWO <class 'str'> <class 'str'> <class 'str'> <class 'str'> # THREE <class 'str'> <class 'str'> <class 'str'> <class 'str'>
Spรฉcifiez le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) pour chaque colonne
Comme avec ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() , vous pouvez utiliser un dictionnaire pour ralentir le type de donnรฉes de chaque colonne dans ๐ซโ๐โ๐โ๐โ_๐โ๐ฌโ๐ฏโ() .
df_col = pd.read_csv('data/src/sample_header_index_dtype.csv', index_col=0, dtype={'a': float, 'b': str}) print(df_col) # a b c d # ONE 1.0 001 100.0 x # TWO 2.0 020 NaN y # THREE 3.0 300 300.0 z print(df_col.dtypes) # a float64 # b object # c float64 # d object # dtype: object
Les clรฉs du dictionnaire peuvent รฉgalement รชtre des numรฉros de colonnes. Attention, si vous spรฉcifiez la colonne d'index, vous devez prรฉciser les numรฉros de colonnes en incluant la colonne d'index.
df_col = pd.read_csv('data/src/sample_header_index_dtype.csv', index_col=0, dtype={1: float, 2: str}) print(df_col) # a b c d # ONE 1.0 001 100.0 x # TWO 2.0 020 NaN y # THREE 3.0 300 300.0 z print(df_col.dtypes) # a float64 # b object # c float64 # d object # dtype: object
Conversions de type implicites
En plus des conversions de type explicites ร l'aide de ๐โ๐ฌโ๐ญโ๐ฒโ๐ฉโ๐โ() , les types de donnรฉes peuvent รฉgalement รชtre convertis implicitement au cours de certaines opรฉrations.
Considรฉrez un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ avec des colonnes d'entiers ( ๐ขโ๐งโ๐ญโ ) et des colonnes de virgule flottante ( ๐โ๐ฅโ๐จโ๐โ๐ญโ ) comme exemple.
df_mix = pd.DataFrame({'col_int': [0, 1, 2], 'col_float': [0.0, 0.1, 0.2]}, index=['A', 'B', 'C']) print(df_mix) # col_int col_float # A 0 0.0 # B 1 0.1 # C 2 0.2 print(df_mix.dtypes) # col_int int64 # col_float float64 # dtype: object
Conversion de type implicite par opรฉrations arithmรฉtiques
Par exemple, le rรฉsultat de l'addition par l'opรฉrateur + d'une colonne ๐ขโ๐งโ๐ญโ ร une colonne ๐โ๐ฅโ๐จโ๐โ๐ญโ est un ๐โ๐ฅโ๐จโ๐โ๐ญโ .
print(df_mix['col_int'] + df_mix['col_float']) # A 0.0 # B 1.1 # C 2.2 # dtype: float64
De mรชme, les opรฉrations avec des valeurs scalaires convertissent implicitement le type de donnรฉes. Le rรฉsultat de la division par l'opรฉrateur / est ๐โ๐ฅโ๐จโ๐โ๐ญโ .
print(df_mix / 1) # col_int col_float # A 0.0 0.0 # B 1.0 0.1 # C 2.0 0.2 print((df_mix / 1).dtypes) # col_int float64 # col_float float64 # dtype: object
Pour les opรฉrations arithmรฉtiques telles que + , - , * , // et ** , les opรฉrations impliquant uniquement des entiers renvoient ๐ขโ๐งโ๐ญโ , tandis que celles impliquant au moins un nombre ร virgule flottante renvoient ๐โ๐ฅโ๐จโ๐โ๐ญโ . Cela รฉquivaut ร la conversion de type implicite du tableau NumPy ๐งโ๐โ๐โ๐ซโ๐ซโ๐โ๐ฒโ .
print(df_mix * 1) # col_int col_float # A 0 0.0 # B 1 0.1 # C 2 0.2 print((df_mix * 1).dtypes) # col_int int64 # col_float float64 # dtype: object print(df_mix * 1.0) # col_int col_float # A 0.0 0.0 # B 1.0 0.1 # C 2.0 0.2 print((df_mix * 1.0).dtypes) # col_int float64 # col_float float64 # dtype: object
Conversion de type implicite par transposition, etc.
Le type de donnรฉes peut changer lorsque vous sรฉlectionnez une ligne comme S๐โ๐ซโ๐ขโ๐โ๐ฌโ en utilisant ๐ฅโ๐จโ๐โ ou ๐ขโ๐ฅโ๐จโ๐โ , ou lorsque vous transposez un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ avec T ou ๐ญโ๐ซโ๐โ๐งโ๐ฌโ๐ฉโ๐จโ๐ฌโ๐โ() .
- pandas : obtenir/dรฉfinir des valeurs avec loc, iloc, at, iat
- pandas : Transposer le DataFrame (รฉchanger les lignes et les colonnes)
print(df_mix.loc['A']) # col_int 0.0 # col_float 0.0 # Name: A, dtype: float64 print(df_mix.T) # A B C # col_int 0.0 1.0 2.0 # col_float 0.0 0.1 0.2 print(df_mix.T.dtypes) # A float64 # B float64 # C float64 # dtype: object
Conversion de type implicite par affectation aux รฉlรฉments
Le type de donnรฉes peut รฉgalement รชtre converti implicitement lors de l'attribution d'une valeur ร un รฉlรฉment.
Par exemple, l'attribution d'une valeur ๐โ๐ฅโ๐จโ๐โ๐ญโ ร un รฉlรฉment de la colonne ๐ขโ๐งโ๐ญโ convertit cette colonne en ๐โ๐ฅโ๐จโ๐โ๐ญโ , tandis que l'attribution d'une valeur ๐ขโ๐งโ๐ญโ ร un รฉlรฉment de la colonne ๐โ๐ฅโ๐จโ๐โ๐ญโ conserve le type ๐โ๐ฅโ๐จโ๐โ๐ญโ pour cet รฉlรฉment.
df_mix.at['A', 'col_int'] = 10.1 df_mix.at['A', 'col_float'] = 10 print(df_mix) # col_int col_float # A 10.1 10.0 # B 1.0 0.1 # C 2.0 0.2 print(df_mix.dtypes) # col_int float64 # col_float float64 # dtype: object
Lorsqu'une valeur de chaรฎne est attribuรฉe ร un รฉlรฉment dans la colonne numรฉrique, le type de donnรฉes de la colonne est converti en ๐จโ๐โ๐ฃโ๐โ๐โ๐ญโ .
df_mix.at['A', 'col_float'] = 'abc' print(df_mix) # col_int col_float # A 10.1 abc # B 1.0 0.1 # C 2.0 0.2 print(df_mix.dtypes) # col_int float64 # col_float object # dtype: object print(df_mix.applymap(type)) # col_int col_float # A <class 'float'> <class 'str'> # B <class 'float'> <class 'float'> # C <class 'float'> <class 'float'>
L'exemple de code ci-dessus est basรฉ sur la version 2.0.3 . Dans la version 0.22.0 , le type de colonne restait essentiellement aprรจs l'affectation d'un รฉlรฉment d'un type diffรฉrent, bien que le type de l'รฉlรฉment affectรฉ lui-mรชme ait changรฉ. Notez que le comportement peut diffรฉrer selon la version.
