Skip to content

๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.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 ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() .

Contenu

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.

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.

Remarque : N๐šโ€ŒN

Vous pouvez dรฉterminer la valeur manquante N๐šโ€ŒN avec ๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐ฎโ€Œ๐ฅโ€Œ๐ฅโ€Œ() ou la supprimer avec ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ๐งโ€Œ๐šโ€Œ() .

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๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() 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 ๐ญโ€Œ๐ซโ€Œ๐šโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐จโ€Œ๐ฌโ€Œ๐žโ€Œ() .

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiรฉe. Les champs obligatoires sont indiquรฉs avec *