Dans pandas, vous pouvez utiliser les mรฉthodes ๐ฆโ๐โ๐ฉโ() , ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() et ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ() pour appliquer des fonctions aux valeurs (รฉlรฉment par รฉlรฉment), aux lignes ou aux colonnes dans D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ๐ฌโ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ .
- Apply functions to values in S๐โ๐ซโ๐ขโ๐โ๐ฌโ: ๐ฆโ๐โ๐ฉโ(), ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ()
- Apply functions to values in D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ: ๐ฆโ๐โ๐ฉโ(), ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ()
- Apply functions to rows and columns in D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ: ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ()
- Basic usage
- Specify rows or columns: ๐โ๐ฑโ๐ขโ๐ฌโ
- Specify arguments for the function: Keyword arguments, ๐โ๐ซโ๐ โ๐ฌโ
- Pass as ๐งโ๐โ๐โ๐ซโ๐ซโ๐โ๐ฒโ instead of S๐โ๐ซโ๐ขโ๐โ๐ฌโ: ๐ซโ๐โ๐ฐโ
- Apply functions to specific rows or columns
- Use methods of D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ and S๐โ๐ซโ๐ขโ๐โ๐ฌโ, and arithmetic Operators
- Use NumPy functions
- Speed comparison
Comme mentionnรฉ plus tard, D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ incluent dรฉjร des mรฉthodes pour les opรฉrations courantes. De plus, vous pouvez appliquer des fonctions NumPy ร D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ . L’utilisation de mรฉthodes dรฉdiรฉes ou de fonctions NumPy est prรฉfรฉrable ร ๐ฆโ๐โ๐ฉโ() ou ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() en raison de meilleures performances.
Les versions de pandas et de NumPy utilisรฉes dans cet article sont les suivantes. Notez que les fonctionnalitรฉs peuvent varier selon les versions.
import pandas as pd import numpy as np print(pd.__version__) # 2.1.2 print(np.__version__) # 1.26.1
Appliquer des fonctions aux valeurs dans S๐โ๐ซโ๐ขโ๐โ๐ฌโ : ๐ฆโ๐โ๐ฉโ() , ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ()
Pour appliquer une fonction ร chaque valeur d’un S๐โ๐ซโ๐ขโ๐โ๐ฌโ (รฉlรฉment par รฉlรฉment), utilisez les mรฉthodes ๐ฆโ๐โ๐ฉโ() ou ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() .
- pandas.Series.map โ documentation de pandas 2.1.3
- pandas.Series.apply โ documentation de pandas 2.1.3
Comment utiliser ๐ฆโ๐โ๐ฉโ()
Le passage d’une fonction ร ๐ฆโ๐โ๐ฉโ() renvoie un nouveau S๐โ๐ซโ๐ขโ๐โ๐ฌโ , avec la fonction appliquรฉe ร chaque valeur. Par exemple, appliquez la fonction intรฉgrรฉe ๐กโ๐โ๐ฑโ() pour convertir des entiers en chaรฎnes hexadรฉcimales.
s = pd.Series([1, 10, 100]) print(s) # 0 1 # 1 10 # 2 100 # dtype: int64 print(s.map(hex)) # 0 0x1 # 1 0xa # 2 0x64 # dtype: object
Vous pouvez รฉgalement appliquer des fonctions dรฉfinies avec des expressions ๐โ๐โ๐โ ou lambda.
def my_func(x): return x * 10 print(s.map(my_func)) # 0 10 # 1 100 # 2 1000 # dtype: int64 print(s.map(lambda x: x * 10)) # 0 10 # 1 100 # 2 1000 # dtype: int64
L’exemple ci-dessus est fourni ร titre illustratif ; des opรฉrations arithmรฉtiques simples peuvent รชtre effectuรฉes directement sur un S๐โ๐ซโ๐ขโ๐โ๐ฌโ .
print(s * 10) # 0 10 # 1 100 # 2 1000 # dtype: int64
Par dรฉfaut, les valeurs manquantes ( N๐โN ) sont transmises ร la fonction, mais si vous dรฉfinissez le deuxiรจme argument ๐งโ๐โ_๐โ๐โ๐ญโ๐ขโ๐จโ๐งโ sur ‘๐ขโ๐ โ๐งโ๐จโ๐ซโ๐โ’ , N๐โN ne sera pas transmis ร la fonction et le rรฉsultat restera N๐โN .
รtant donnรฉ que la prรฉsence de N๐โN modifie le type de donnรฉes ( ๐โ๐ญโ๐ฒโ๐ฉโ๐โ ) en un nombre ร virgule flottante ( ๐โ๐ฅโ๐จโ๐โ๐ญโ ), les valeurs sont converties en entiers ( ๐ขโ๐งโ๐ญโ ) ร l’aide de ๐ขโ๐งโ๐ญโ() avant d’รชtre passรฉ ร ๐กโ๐โ๐ฑโ() dans l’exemple suivant.
s_nan = pd.Series([1, float('nan'), 100]) print(s_nan) # 0 1.0 # 1 NaN # 2 100.0 # dtype: float64 # print(s_nan.map(lambda x: hex(int(x)))) # ValueError: cannot convert float NaN to integer print(s_nan.map(lambda x: hex(int(x)), na_action='ignore')) # 0 0x1 # 1 NaN # 2 0x64 # dtype: object
Vous pouvez รฉgalement passer un dictionnaire ( ๐โ๐ขโ๐โ๐ญโ ) ร ๐ฆโ๐โ๐ฉโ() . Dans ce cas, il remplace les valeurs. Pour plus de dรฉtails, reportez-vous ร l’article suivant.
Comment utiliser ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ()
Similairement ร ๐ฆโ๐โ๐ฉโ() , la fonction spรฉcifiรฉe comme premier argument dans ๐โ๐ฉโ๐ฉ๐ฅโ๐ฒโ() est appliquรฉe ร chaque valeur. La diffรฉrence est que ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() vous permet de prรฉciser des arguments ร transmettre ร la fonction.
Avec ๐ฆโ๐โ๐ฉโ() , vous devez utiliser une expression lambda ou une approche similaire pour transmettre des arguments ร la fonction. Par exemple, spรฉcifiez l’argument ๐โ๐โ๐ฌโ๐โ dans la fonction ๐ขโ๐งโ๐ญโ() , qui convertit les chaรฎnes en entiers.
s = pd.Series(['11', 'AA', 'FF']) print(s) # 0 11 # 1 AA # 2 FF # dtype: object # print(s.map(int, base=16)) # TypeError: Series.map() got an unexpected keyword argument 'base' print(s.map(lambda x: int(x, 16))) # 0 17 # 1 170 # 2 255 # dtype: int64
Avec ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() , tous les arguments de mot-clรฉ spรฉcifiรฉs sont transmis directement ร la fonction. Il est รฉgalement possible de prรฉciser des arguments positionnels ร l’aide de l’argument ๐โ๐ซโ๐ โ๐ฌโ .
print(s.apply(int, base=16)) # 0 17 # 1 170 # 2 255 # dtype: int64 print(s.apply(int, args=(16,))) # 0 17 # 1 170 # 2 255 # dtype: int64
Notez que mรชme s’il n’y a qu’un seul argument positionnel, il doit รชtre spรฉcifiรฉ sous forme de tuple ou de liste dans l’argument ๐โ๐ซโ๐ โ๐ฌโ . Une virgule est nรฉcessaire ร la fin d’un tuple ร un รฉlรฉment.
ร partir de la version 2.1.2, ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() n’a pas l’argument ๐งโ๐โ_๐โ๐โ๐ญโ๐ขโ๐จโ๐งโ .
Appliquer des fonctions aux valeurs dans D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ : ๐ฆโ๐โ๐ฉโ() , ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ()
Pour appliquer une fonction ร chaque valeur d’un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ (รฉlรฉment par รฉlรฉment), utilisez les mรฉthodes ๐ฆโ๐โ๐ฉโ() ou ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ() .
Depuis la version 2.1.0, ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ() a รฉtรฉ renommรฉ en ๐ฆโ๐โ๐ฉโ() et marquรฉ comme obsolรจte.
- Nouveautรฉs de la version 2.1.0 (30 aoรปt 2023) โ Documentation de pandas 2.1.3
- pandas.DataFrame.map โ documentation de pandas 2.1.3
- pandas.DataFrame.applymap โ documentation de pandas 2.1.3
ร partir de la version 2.1.2, ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ() est toujours utilisable mais gรฉnรจre un F๐ฎโ๐ญโ๐ฎโ๐ซโ๐โW๐โ๐ซโ๐งโ๐ขโ๐งโ๐ โ .
df = pd.DataFrame([[1, 10, 100], [2, 20, 200]]) print(df) # 0 1 2 # 0 1 10 100 # 1 2 20 200 print(df.map(hex)) # 0 1 2 # 0 0x1 0xa 0x64 # 1 0x2 0x14 0xc8 print(df.applymap(hex)) # 0 1 2 # 0 0x1 0xa 0x64 # 1 0x2 0x14 0xc8 # # /var/folders/rf/b7l8_vgj5mdgvghn_326rn_c0000gn/T/ipykernel_36685/2076800564.py:1: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.
L’exemple suivant utilise ๐ฆโ๐โ๐ฉโ() , mais ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ() a la mรชme utilisation et les mรชmes fonctionnalitรฉs. Dans les versions antรฉrieures ร 2.1.0, utilisez ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ๐ฆโ๐โ๐ฉโ() .
Comme avec ๐ฆโ๐โ๐ฉโ() de S๐โ๐ซโ๐ขโ๐โ๐ฌโ , l’argument ๐งโ๐โ_๐โ๐โ๐ญโ๐ขโ๐จโ๐งโ peut รชtre spรฉcifiรฉ pour ๐ฆโ๐โ๐ฉโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ . Par dรฉfaut, les valeurs manquantes ( N๐โN ) sont transmises ร la fonction, mais si ๐งโ๐โ_๐โ๐โ๐ญโ๐ขโ๐จโ๐งโ est dรฉfinie sur ‘๐ขโ๐ โ๐งโ๐จโ๐ซโ๐โ’ , N๐โN n’est pas transmis ร la fonction et le rรฉsultat reste N๐โN .
df_nan = pd.DataFrame([[1, float('nan'), 100], [2, 20, 200]]) print(df_nan) # 0 1 2 # 0 1 NaN 100 # 1 2 20.0 200 # print(df_nan.map(lambda x: hex(int(x)))) # ValueError: cannot convert float NaN to integer print(df_nan.map(lambda x: hex(int(x)), na_action='ignore')) # 0 1 2 # 0 0x1 NaN 0x64 # 1 0x2 0x14 0xc8
Contrairement ร ๐ฆโ๐โ๐ฉโ() de S๐โ๐ซโ๐ขโ๐โ๐ฌโ , ๐ฆโ๐โ๐ฉโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ transmet l’argument mot-clรฉ spรฉcifiรฉ ร la fonction.
df = pd.DataFrame([['1', 'A', 'F'], ['11', 'AA', 'FF']]) print(df) # 0 1 2 # 0 1 A F # 1 11 AA FF print(df.map(int, base=16)) # 0 1 2 # 0 1 10 15 # 1 17 170 255
ร partir de la version 2.1.2, ๐ฆโ๐โ๐ฉโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ n’a pas l’argument ๐โ๐ซโ๐ โ๐ฌโ , ce qui signifie que vous ne pouvez pas dรฉfinir d’arguments positionnels.
Appliquer des fonctions aux lignes et aux colonnes dans D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ : ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ()
Pour appliquer une fonction aux lignes ou aux colonnes d’un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ , utilisez la mรฉthode ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() .
Pour la mรฉthode ๐โ๐ โ๐ โ() appliquer plusieurs opรฉrations ร la fois, consultez l’article suivant.
Utilisation de la base
Spรฉcifiez la fonction que vous souhaitez appliquer comme premier argument.
Notez que la fonction ๐ฌโ๐ฎโ๐ฆโ() intรฉgrรฉe est utilisรฉe ร des fins d’explication, mais si vous devez calculer une somme, il est prรฉfรฉrable d’utiliser la mรฉthode ๐ฌโ๐ฎโ๐ฆโ() mentionnรฉe plus tard.
df = pd.DataFrame([[10, 20, 30], [40, 50, 60]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 10 20 30 # Y 40 50 60 print(df.apply(sum)) # A 50 # B 70 # C 90 # dtype: int64
Par dรฉfaut, chaque colonne est transmise ร la fonction sous la forme d’un S๐โ๐ซโ๐ขโ๐โ๐ฌโ . Si la fonction ne peut pas accepter un S๐โ๐ซโ๐ขโ๐โ๐ฌโ comme argument, une erreur se produit.
print(df.apply(lambda x: type(x))) # A <class 'pandas.core.series.Series'> # B <class 'pandas.core.series.Series'> # C <class 'pandas.core.series.Series'> # dtype: object # print(hex(df['A'])) # TypeError: 'Series' object cannot be interpreted as an integer # print(df.apply(hex)) # TypeError: 'Series' object cannot be interpreted as an integer
Spรฉcifiez les lignes ou les colonnes : ๐โ๐ฑโ๐ขโ๐ฌโ
Par dรฉfaut, la fonction est appliquรฉe ร chaque colonne. Cependant, si vous dรฉfinissez l’argument ๐โ๐ฑโ๐ขโ๐ฌโ sur 1 ou ‘๐โ๐จโ๐ฅโ๐ฎโ๐ฆโ๐งโ๐ฌโ’, l’applique ร chaque ligne.
df = pd.DataFrame([[10, 20, 30], [40, 50, 60]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 10 20 30 # Y 40 50 60 print(df.apply(sum, axis=1)) # X 60 # Y 150 # dtype: int64
Spรฉcifiez les arguments de la fonction : arguments par mot-clรฉ, ๐โ๐ซโ๐ โ๐ฌโ
Tous les arguments de mot-clรฉ spรฉcifiรฉs dans ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() sont transmis ร la fonction en cours d’application. Vous pouvez รฉgalement prรฉciser des arguments positionnels ร l’aide de l’argument ๐โ๐ซโ๐ โ๐ฌโ .
df = pd.DataFrame([[10, 20, 30], [40, 50, 60]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 10 20 30 # Y 40 50 60 def my_func(x, y, z): return sum(x) + y + z * 2 print(df.apply(my_func, y=100, z=1000)) # A 2150 # B 2170 # C 2190 # dtype: int64 print(df.apply(my_func, args=(100, 1000))) # A 2150 # B 2170 # C 2190 # dtype: int64
Passer pour ๐งโ๐โ๐โ๐ซโ๐ซโ๐โ๐ฒโ au lieu de S๐โ๐ซโ๐ขโ๐โ๐ฌโ : ๐ซโ๐โ๐ฐโ
Par dรฉfaut, chaque ligne ou colonne est transmise sous forme de S๐โ๐ซโ๐ขโ๐โ๐ฌโ . Si vous dรฉfinissez l’argument ๐ซโ๐โ๐ฐโ sur T๐ซโ๐ฎโ๐โ , ils sont transmis sous forme de tableaux NumPy ( ๐งโ๐โ๐โ๐ซโ๐ซโ๐โ๐ฒโ ).
df = pd.DataFrame([[10, 20, 30], [40, 50, 60]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 10 20 30 # Y 40 50 60 print(df.apply(lambda x: type(x), raw=True)) # A <class 'numpy.ndarray'> # B <class 'numpy.ndarray'> # C <class 'numpy.ndarray'> # dtype: object
Si aucun S๐โ๐ซโ๐ขโ๐โ๐ฌโ n’est nรฉcessaire, l’utilisation de ๐ซโ๐โ๐ฐโ=T๐ซโ๐ฎโ๐โ est plus rapide puisque le processus de conversion est omis. Cependant, si la fonction nรฉcessite des mรฉthodes ou des attributs S๐โ๐ซโ๐ขโ๐โ๐ฌโ , la dรฉfinition de ๐ซโ๐โ๐ฐโ=T๐ซโ๐ฎโ๐โ gรฉnรจre une erreur.
print(df.apply(lambda x: x.name * 3)) # A AAA # B BBB # C CCC # dtype: object # print(df.apply(lambda x: x.name * 3, raw=True)) # AttributeError: 'numpy.ndarray' object has no attribute 'name'
Appliquer des fonctions ร des lignes ou des colonnes spรฉcifiques
Pour appliquer une fonction ร une ligne ou une colonne spรฉcifique, extrayez la ligne ou la colonne sous forme de S๐โ๐ซโ๐ขโ๐โ๐ฌโ et utilisez les mรฉthodes ๐ฆโ๐โ๐ฉโ() ou ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() de S๐โ๐ซโ๐ขโ๐โ๐ฌโ .
df = pd.DataFrame([[10, 20, 30], [40, 50, 60]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 10 20 30 # Y 40 50 60 print(df['A'].map(lambda x: x**2)) # X 100 # Y 1600 # Name: A, dtype: int64 print(df.loc['Y'].map(hex)) # A 0x28 # B 0x32 # C 0x3c # Name: Y, dtype: object
Vous pouvez les ajouter en tant que nouvelles lignes ou colonnes. Si les mรชmes noms de lignes ou de colonnes sont spรฉcifiรฉs, ils seront รฉcrasรฉs.
df['A'] = df['A'].map(lambda x: x**2) df.loc['Y_hex'] = df.loc['Y'].map(hex) print(df) # A B C # X 100 20 30 # Y 1600 50 60 # Y_hex 0x640 0x32 0x3c
Utiliser les mรฉthodes D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ et les opรฉrateurs arithmรฉtiques
Dans pandas, les opรฉrations courantes sont fournies sous forme de mรฉthodes pour D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ , il n’est donc pas nรฉcessaire d’utiliser ๐ฆโ๐โ๐ฉโ() ou ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() .
df = pd.DataFrame([[1, -2, 3], [-4, 5, -6]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 1 -2 3 # Y -4 5 -6 print(df.abs()) # A B C # X 1 2 3 # Y 4 5 6 print(df.sum()) # A -3 # B 3 # C -3 # dtype: int64 print(df.sum(axis=1)) # X 2 # Y -5 # dtype: int64
Pour une liste des mรฉthodes disponibles, reportez-vous ร la documentation officielle.
- DataFrame – Calculs / statistiques descriptives โ documentation pandas 2.1.3
- Sรฉrie – Calculs / statistiques descriptives โ documentation pandas 2.1.3
Vous pouvez รฉgalement traiter D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ directement ร l’aide d’opรฉrateurs arithmรฉtiques.
print(df * 10) # A B C # X 10 -20 30 # Y -40 50 -60 print(df['A'].abs() + df['B'] * 100) # X -199 # Y 504 # dtype: int64
Des mรฉthodes de manipulation de chaรฎnes sont รฉgalement disponibles via l’accesseur ๐ฌโ๐ญโ๐ซโ de S๐โ๐ซโ๐ขโ๐โ๐ฌโ .
df = pd.DataFrame([['a', 'ab', 'abc'], ['x', 'xy', 'xyz']], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X a ab abc # Y x xy xyz print(df['A'] + '-' + df['B'].str.upper() + '-' + df['C'].str.title()) # X a-AB-Abc # Y x-XY-Xyz # dtype: object
Utiliser les fonctions NumPy
Vous pouvez traiter D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ en transmettant aux fonctions NumPy.
Par exemple, bien que pandas ne fournisse pas de mรฉthode pour tronquer les dรฉcimales, vous pouvez utiliser ๐งโ๐ฉโ.๐โ๐ฅโ๐จโ๐จโ๐ซโ() ร la place. Pour D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ , un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ est renvoyรฉ ; pour S๐โ๐ซโ๐ขโ๐โ๐ฌโ , un S๐โ๐ซโ๐ขโ๐โ๐ฌโ est renvoyรฉ.
df = pd.DataFrame([[0.1, 0.5, 0.9], [-0.1, -0.5, -0.9]], index=['X', 'Y'], columns=['A', 'B', 'C']) print(df) # A B C # X 0.1 0.5 0.9 # Y -0.1 -0.5 -0.9 print(np.floor(df)) # A B C # X 0.0 0.0 0.0 # Y -1.0 -1.0 -1.0 print(type(np.floor(df))) # <class 'pandas.core.frame.DataFrame'> print(np.floor(df['A'])) # X 0.0 # Y -1.0 # Name: A, dtype: float64 print(type(np.floor(df['A']))) # <class 'pandas.core.series.Series'>
Il est รฉgalement possible de dรฉfinir l’argument ๐โ๐ฑโ๐ขโ๐ฌโ dans la fonction NumPy.
print(np.sum(df, axis=0)) # A 0.0 # B 0.0 # C 0.0 # dtype: float64 print(np.sum(df, axis=1)) # X 1.5 # Y -1.5 # dtype: float64 print(type(np.sum(df, axis=0))) # <class 'pandas.core.series.Series'>
Comparaison de vitesse
Comparez les vitesses de traitement des mรฉthodes ๐ฆโ๐โ๐ฉโ() et ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ avec d’autres mรฉthodes dรฉdiรฉes et fonctions NumPy.
Considรฉrez un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ avec 100 lignes et 100 colonnes.
df = pd.DataFrame(np.arange(-5000, 5000).reshape(100, 100)) print(df.shape) # (100, 100)
Notez que les exemples suivants utilisent la commande magique %%๐ญโ๐ขโ๐ฆโ๐โ๐ขโ๐ญโ dans Jupyter Notebook. Ils ne fonctionneront pas s’ils sont exรฉcutรฉs en tant que script Python.
Les rรฉsultats de l’utilisation de la fonction intรฉgrรฉe ๐โ๐โ๐ฌโ() avec ๐ฆโ๐โ๐ฉโ() , comparรฉs ร l’utilisation de la mรฉthode ๐โ๐โ๐ฌโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et de la fonction ๐งโ๐ฉโ.๐โ๐โ๐ฌโ() , sont les suivants. On peut observer que ๐ฆโ๐โ๐ฉโ() est plus prรชtรฉ.
%%timeit df.map(abs) # 2.07 ms ยฑ 16.5 ยตs per loop (mean ยฑ std. dev. of 7 runs, 100 loops each) %%timeit df.abs() # 5.06 ยตs ยฑ 55 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000 loops each) %%timeit np.abs(df) # 7.81 ยตs ยฑ 120 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000 loops each)
Les rรฉsultats de l’utilisation de la fonction intรฉgrรฉe ๐ฌโ๐ฎโ๐ฆโ() avec ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() , comparรฉs ร l’utilisation de la mรฉthode ๐ฌโ๐ฎโ๐ฆโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et de la fonction ๐งโ๐ฉโ.๐ฌโ๐ฎโ๐ฆโ() , sont les suivants. On peut voir que ๐โ๐ฉโ๐ฉโ๐ฅโ๐ฒโ() est plus carรชme. Bien que le rรฉglage ๐ซโ๐โ๐ฐโ=T๐ซโ๐ฎโ๐โ l’accรฉlรจre, il est toujours significativement plus lent que ๐ฌโ๐ฎโ๐ฆโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ou ๐งโ๐ฉโ.๐ฌโ๐ฎโ๐ฆโ() .
%%timeit df.apply(sum) # 932 ยตs ยฑ 95.8 ยตs per loop (mean ยฑ std. dev. of 7 runs, 1,000 loops each) %%timeit df.apply(sum, raw=True) # 427 ยตs ยฑ 4.8 ยตs per loop (mean ยฑ std. dev. of 7 runs, 1,000 loops each) %%timeit df.sum() # 35 ยตs ยฑ 140 ns per loop (mean ยฑ std. dev. of 7 runs, 10,000 loops each) %%timeit np.sum(df, axis=0) # 37.3 ยตs ยฑ 66.9 ns per loop (mean ยฑ std. dev. of 7 runs, 10,000 loops each)
Les mรฉthodes ๐ฆโ๐โ๐ฉโ() et ๐โ๐ฉโ๐ฉ๐ฅโ๐ฒโ() doivent รชtre utilisรฉes principalement pour les opรฉrations complexes qui ne peuvent pas รชtre rรฉalisรฉes avec d’autres mรฉthodes ou fonctions NumPy. Si possible, il est prรฉfรฉrable d’utiliser d’autres mรฉthodes ou fonctions NumPy.
