Skip to content

Cet article explique comment convertir entre ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Bien que le terme ยซ convertir ยป soit utilisรฉ par commoditรฉ, il fait en rรฉalitรฉ rรฉfรฉrence au processus de gรฉnรฉration d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ร  partir d’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , ou de rรฉcupรฉration d’une colonne ou d’une ligne d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ en tant que S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Contenu

Il est important de noter, comme expliquรฉ ร  la fin, que les objets d’origine et les objets gรฉnรฉrรฉs ou rรฉcupรฉrรฉs peuvent partager la mรฉmoire. Par consรฉquent, la modification dโ€™une valeur dans lโ€™un peut affecter lโ€™autre.

Pour convertir D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ vers et depuis les tableaux NumPy ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ) et les listes intรฉgrรฉes de Python, reportez-vous aux articles suivants.

La version de pandas utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions.

import pandas as pd print(pd.__version__) # 2.1.4 

Convertir S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ en D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ

Pour convertir un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ en D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , utilisez la mรฉthode ๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() ou le constructeur ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() .

๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ()

La mรฉthode ๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() renvoie une valeur D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ avec la colonne appelante S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ . Un nom de colonne peut รชtre spรฉcifiรฉ comme premier argument.

s = pd.Series([0, 1, 2], index=['A', 'B', 'C']) print(s) # A 0 # B 1 # C 2 # dtype: int64 print(s.to_frame()) # 0 # A 0 # B 1 # C 2 print(s.to_frame('X')) # X # A 0 # B 1 # C 2 

Si l’attribut ๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est dรฉfini pour S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , il devient le nom de la colonne. Si un premier argument est spรฉcifiรฉ dans ๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() , il a la prioritรฉ.

s_name = pd.Series([0, 1, 2], index=['A', 'B', 'C'], name='X') print(s_name) # A 0 # B 1 # C 2 # Name: X, dtype: int64 print(s_name.to_frame()) # X # A 0 # B 1 # C 2 print(s_name.to_frame('Y')) # Y # A 0 # B 1 # C 2 

๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ()

Passer un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ au constructeur ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() crรฉe un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ avec le S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ comme colonne, tout en passant une liste de S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ crรฉe un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ avec les S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ comme lignes.

s = pd.Series([0, 1, 2], index=['A', 'B', 'C']) print(s) # A 0 # B 1 # C 2 # dtype: int64 print(pd.DataFrame(s)) # 0 # A 0 # B 1 # C 2 print(pd.DataFrame([s])) # A B C # 0 0 1 2 

Si l’attribut ๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est dรฉfini pour S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , il devient le nom de la colonne ou de la ligne.

s_name = pd.Series([0, 1, 2], index=['A', 'B', 'C'], name='X') print(s_name) # A 0 # B 1 # C 2 # Name: X, dtype: int64 print(pd.DataFrame(s_name)) # X # A 0 # B 1 # C 2 print(pd.DataFrame([s_name])) # A B C # X 0 1 2 

Gรฉnรฉrer D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ร  partir de plusieurs S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ

Un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ peut รชtre gรฉnรฉrรฉ ร  partir de plusieurs S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ en utilisant soit le constructeur ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ(), soit la fonction ๐ฉโ€Œ๐โ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() . L’exemple suivant utilise deux S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , mais le mรชme processus s’applique lors de l’utilisation de trois S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ou plus .

Lorsque les index sont communs

Voici un exemple d’utilisation du constructeur ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() . Notez que la conversion de type implicite se produit lorsque des S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ de diffรฉrents types de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) sont utilisรฉs comme lignes.

s1 = pd.Series([0, 1, 2], index=['A', 'B', 'C']) s2 = pd.Series([0.0, 0.1, 0.2], index=['A', 'B', 'C']) print(pd.DataFrame({'col1': s1, 'col2': s2})) # col1 col2 # A 0 0.0 # B 1 0.1 # C 2 0.2 print(pd.DataFrame([s1, s2])) # A B C # 0 0.0 1.0 2.0 # 1 0.0 0.1 0.2 

Vous pouvez รฉgalement utiliser la fonction ๐ฉโ€Œ๐โ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() .

print(pd.concat([s1, s2], axis=1)) # 0 1 # A 0 0.0 # B 1 0.1 # C 2 0.2 

Si les attributs ๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ sont dรฉfinis pour le S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ d’origine , ils seront utilisรฉs comme noms de colonnes ou de lignes dans le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ rรฉsultante . Notez que les noms de colonnes doivent รชtre prรฉcisรฉs lors de l’utilisation d’un dictionnaire pour prรฉciser les donnรฉes dans le constructeur.

s1_name = pd.Series([0, 1, 2], index=['A', 'B', 'C'], name='X') s2_name = pd.Series([0.0, 0.1, 0.2], index=['A', 'B', 'C'], name='Y') print(pd.DataFrame({s1_name.name: s1_name, s2_name.name: s2_name})) # X Y # A 0 0.0 # B 1 0.1 # C 2 0.2 print(pd.DataFrame([s1_name, s2_name])) # A B C # X 0.0 1.0 2.0 # Y 0.0 0.1 0.2 print(pd.concat([s1_name, s2_name], axis=1)) # X Y # A 0 0.0 # B 1 0.1 # C 2 0.2 

Lorsque les index sont diffรฉrents

Un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est gรฉnรฉrรฉ en fonction des index de S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ . Si S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ont des index diffรฉrents, des valeurs manquantes ( N๐šโ€ŒN ) se produiront.

s1 = pd.Series([0, 1, 2], index=['A', 'B', 'C']) s3 = pd.Series([0.1, 0.2, 0.3], index=['B', 'C', 'D']) print(pd.DataFrame({'col1': s1, 'col3': s3})) # col1 col3 # A 0.0 NaN # B 1.0 0.1 # C 2.0 0.2 # D NaN 0.3 print(pd.DataFrame([s1, s3])) # A B C D # 0 0.0 1.0 2.0 NaN # 1 NaN 0.1 0.2 0.3 print(pd.concat([s1, s3], axis=1)) # 0 1 # A 0.0 NaN # B 1.0 0.1 # C 2.0 0.2 # D NaN 0.3 

Pour gรฉrer les valeurs manquantes dans pandas, reportez-vous ร  l’article suivant.

L’utilisation de ๐ฉโ€Œ๐โ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() avec ๐ฃโ€Œ๐จโ€Œ๐ขโ€Œ๐งโ€Œ=’๐ขโ€Œ๐งโ€Œ๐งโ€Œ๐žโ€Œ๐ซโ€Œ’ conserve uniquement les index communs.

print(pd.concat([s1, s3], axis=1, join='inner')) # 0 1 # B 1 0.1 # C 2 0.2 

Pour modifier les index, utilisez des mรฉthodes telles que ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ_๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ() .

print(s3.set_axis(s1.index)) # A 0.1 # B 0.2 # C 0.3 # dtype: float64 print(pd.DataFrame({'col1': s1, 'col3': s3.set_axis(s1.index)})) # col1 col3 # A 0 0.1 # B 1 0.2 # C 2 0.3 

Pour ignorer les index, vous pouvez spรฉcifier S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ comme un tableau NumPy ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ) en utilisant l’attribut ๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ . Notez que l’utilisation de ๐ฉโ€Œ๐โ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() de cette maniรจre gรฉnรจre une erreur.

print(s1.values) # [0 1 2] print(type(s1.values)) # <class 'numpy.ndarray'> print(pd.DataFrame({'col1': s1.values, 'col3': s3.values})) # col1 col3 # 0 0 0.1 # 1 1 0.2 # 2 2 0.3 print(pd.DataFrame([s1.values, s3.values])) # 0 1 2 # 0 0.0 1.0 2.0 # 1 0.1 0.2 0.3 # print(pd.concat([s1.values, s3.values], axis=1)) # TypeError: cannot concatenate object of type '<class 'numpy.ndarray'>'; only Series and DataFrame objs are valid 

Le constructeur ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() permet de dรฉfinir n’importe quel nom de ligne et de colonne avec les arguments ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ et ๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ๐ฌโ€Œ .

print(pd.DataFrame([s1.values, s3.values], index=['X', 'Y'], columns=['A', 'B', 'C'])) # A B C # X 0.0 1.0 2.0 # Y 0.1 0.2 0.3 

Lorsque le nombre de valeurs diffรจre

Mรชme en combinant S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ avec un nombre de valeurs diffรฉrentes, un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est gรฉnรฉrรฉ en fonction de l’indice. Tous les รฉlรฉments manquants sont complรฉtรฉs par N๐šโ€ŒN .

s1 = pd.Series([0, 1, 2], index=['A', 'B', 'C']) s4 = pd.Series([0.1, 0.3], index=['B', 'D']) print(pd.DataFrame({'col1': s1, 'col4': s4})) # col1 col4 # A 0.0 NaN # B 1.0 0.1 # C 2.0 NaN # D NaN 0.3 print(pd.DataFrame([s1, s4])) # A B C D # 0 0.0 1.0 2.0 NaN # 1 NaN 0.1 NaN 0.3 print(pd.concat([s1, s4], axis=1)) # 0 1 # A 0.0 NaN # B 1.0 0.1 # C 2.0 NaN # D NaN 0.3 print(pd.concat([s1, s4], axis=1, join='inner')) # 0 1 # B 1 0.1 

Comme mentionnรฉ ci-dessus, utilisez des mรฉthodes telles que ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ_๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ() pour modifier les index.

print(pd.DataFrame({'col1': s1, 'col4': s4.set_axis(['A', 'B'])})) # col1 col4 # A 0 0.1 # B 1 0.3 # C 2 NaN 

Le comportement de l’utilisation de l’attribut ๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซ๐šโ€Œ๐ฒโ€Œ ) dans le constructeur varie en fonction de la maniรจre dont il est utilisรฉ. Lorsqu’il est utilisรฉ comme valeurs dans un dictionnaire, il gรฉnรจre une erreur si les tableaux sont de longueurs diffรฉrentes. Cependant, l’utilisation de valeurs comme รฉlรฉments dans une liste est acceptable.

# print(pd.DataFrame({'col1': s1.values, 'col4': s4.values})) # ValueError: All arrays must be of the same length print(pd.DataFrame([s1.values, s4.values])) # 0 1 2 # 0 0.0 1.0 2.0 # 1 0.1 0.3 NaN 

Convertir D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ en S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ

Les lignes et les colonnes de D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ peuvent รชtre rรฉcupรฉrรฉes sous la forme S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ en utilisant [] , ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] ou ๐ขโ€Œ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] . Reportez-vous aux articles suivants pour plus de dรฉtails.

Rรฉcupรฉrer les colonnes D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ sous forme de S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ

En spรฉcifiant un nom de colonne avec [] ou ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] , ou un numรฉro de colonne avec ๐ขโ€Œ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] comme valeur scalaire, cette colonne est rรฉcupรฉrรฉe sous la forme d’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

df = pd.DataFrame({'col0': [0, 1, 2], 'col1': [3, 4, 5], 'col2': [6, 7, 8]}, index=['row0', 'row1', 'row2']) print(df) # col0 col1 col2 # row0 0 3 6 # row1 1 4 7 # row2 2 5 8 print(df['col0']) # row0 0 # row1 1 # row2 2 # Name: col0, dtype: int64 print(df.loc[:, 'col0']) # row0 0 # row1 1 # row2 2 # Name: col0, dtype: int64 print(df.iloc[:, 0]) # row0 0 # row1 1 # row2 2 # Name: col0, dtype: int64 

Avec ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] ou ๐ขโ€Œ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] , il est รฉgalement possible de sรฉlectionner des lignes spรฉcifiques ร  l’aide d’une liste ou d’une tranche.

print(df.iloc[[0, 2], 0]) # row0 0 # row2 2 # Name: col0, dtype: int64 print(df.iloc[:2, 0]) # row0 0 # row1 1 # Name: col0, dtype: int64 

La sรฉlection d’une seule colonne avec une liste ou une tranche gรฉnรจre un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆ๐žโ€Œ avec une seule colonne, et non un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

print(df.loc[:, ['col0']]) # col0 # row0 0 # row1 1 # row2 2 print(df.iloc[:, :1]) # col0 # row0 0 # row1 1 # row2 2 

Rรฉcupรฉrer les lignes D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ sous forme de S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ

La spรฉcification d’un nom de ligne avec ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] ou d’un numรฉro de ligne avec ๐ขโ€Œ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] comme valeur scalaire rรฉcupรจre cette ligne sous la forme d’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

df = pd.DataFrame({'col0': [0, 1, 2], 'col1': [3, 4, 5], 'col2': [6, 7, 8]}, index=['row0', 'row1', 'row2']) print(df) # col0 col1 col2 # row0 0 3 6 # row1 1 4 7 # row2 2 5 8 print(df.loc['row0', :]) # col0 0 # col1 3 # col2 6 # Name: row0, dtype: int64 print(df.iloc[0, :]) # col0 0 # col1 3 # col2 6 # Name: row0, dtype: int64 

Lors de la sรฉlection d’une ligne entiรจre, la spรฉcification de colonne : peut รชtre omise.

print(df.loc['row0']) # col0 0 # col1 3 # col2 6 # Name: row0, dtype: int64 print(df.iloc[0]) # col0 0 # col1 3 # col2 6 # Name: row0, dtype: int64 

Il est รฉgalement possible de sรฉlectionner des colonnes spรฉcifiques ร  l’aide d’une liste ou d’une tranche.

print(df.iloc[0, [0, 2]]) # col0 0 # col2 6 # Name: row0, dtype: int64 print(df.iloc[0, :2]) # col0 0 # col1 3 # Name: row0, dtype: int64 

La sรฉlection d’une seule ligne avec une liste ou une tranche gรฉnรจre un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆ๐žโ€Œ avec une seule ligne, et non un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

print(df.loc[['row0']]) # col0 col1 col2 # row0 0 3 6 print(df.iloc[:1]) # col0 col1 col2 # row0 0 3 6 

Faites attention aux types de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ )

Alors que D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ a des types de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) pour chaque colonne, S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ a un type de donnรฉes.

Soyez prudent lorsque vous rรฉcupรฉrez une ligne d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ en tant que S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Par exemple, la rรฉcupรฉration d’une ligne d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ qui comporte des colonnes de types entiers ( ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ) et nombre ร  virgule flottante ( ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ ) en tant que S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ gรฉnรจre un type de donnรฉes ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ , avec les valeurs dans le type ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ colonne convertie en ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ .

df_multi = pd.DataFrame({'col0': [0, 1, 2], 'col1': [0.0, 0.1, 0.2]}, index=['row0', 'row1', 'row2']) print(df_multi) # col0 col1 # row0 0 0.0 # row1 1 0.1 # row2 2 0.2 s_row = df_multi.loc['row2'] print(s_row) # col0 2.0 # col1 0.2 # Name: row2, dtype: float64 

Si un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ inclut des colonnes de type ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ , la rรฉcupรฉration d’une ligne en tant que S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ gรฉnรจre un type de donnรฉes ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ .

df_multi['col2'] = ['a', 'b', 'c'] print(df_multi) # col0 col1 col2 # row0 0 0.0 a # row1 1 0.1 b # row2 2 0.2 c print(df_multi.dtypes) # col0 int64 # col1 float64 # col2 object # dtype: object s_row = df_multi.loc['row2'] print(s_row) # col0 2 # col1 0.2 # col2 c # Name: row2, dtype: object 

Avec le type ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ , les valeurs conservent leurs types d’origine.

print(type(s_row['col0'])) # <class 'numpy.int64'> print(type(s_row['col1'])) # <class 'numpy.float64'> print(type(s_row['col2'])) # <class 'str'> 

Vues et copies

Lors de la conversion entre D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , l’objet rรฉsultant peut รชtre une vue, soit une copie de l’original. Une vue partage la mรฉmoire avec l’objet d’origine, et la modification de l’une affecte l’autre.

Convertir S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ en D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ

๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ()

La mรฉthode ๐ญโ€Œ๐จโ€Œ_๐Ÿโ€Œ๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() renvoie une vue si possible. Une copie peut รชtre crรฉรฉe avec ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ() .

s = pd.Series([0, 1], index=['A', 'B']) df = s.to_frame() s['A'] = 100 print(df) # 0 # A 100 # B 1 s = pd.Series([0, 1], index=['A', 'B']) df_copy = s.copy().to_frame() s['A'] = 100 print(df_copy) # 0 # A 0 # B 1 

๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ()

Le constructeur ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() renvoie une vue par dรฉfaut si possible. La dรฉfinition de l’argument ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ renvoie une copie.

s = pd.Series([0, 1], index=['A', 'B']) df = pd.DataFrame(s) s['A'] = 100 print(df) # 0 # A 100 # B 1 s = pd.Series([0, 1], index=['A', 'B']) df_copy = pd.DataFrame(s, copy=True) s['A'] = 100 print(df_copy) # 0 # A 0 # B 1 

๐ฉ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž.๐œ๐ž๐ง๐ญ๐ž()

La fonction ๐ฉโ€Œ๐โ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() renvoie une copie par dรฉfaut. La dรฉfinition de l’argument ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ sur F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ renvoie une vue si possible.

s1 = pd.Series([0, 1], index=['A', 'B']) s2 = pd.Series([0.0, 0.1], index=['A', 'B']) df = pd.concat([s1, s2], axis=1) s1['A'] = 100 print(df) # 0 1 # A 0 0.0 # B 1 0.1 s1 = pd.Series([0, 1], index=['A', 'B']) s2 = pd.Series([0.0, 0.1], index=['A', 'B']) df_copy_false = pd.concat([s1, s2], axis=1, copy=False) s1['A'] = 100 print(df_copy_false) # 0 1 # A 100 0.0 # B 1 0.1 

Notez que le paramรจtre ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ=T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ dans des fonctions comme ๐ฉโ€Œ๐โ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ() et ๐ฉโ€Œ๐โ€Œ.๐œโ€Œ๐จโ€Œ๐งโ€Œ๐œโ€Œ๐šโ€Œ๐ญโ€Œ() garantit qu’une copie est effectuรฉe, tandis que ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ=F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ essaie de crรฉer une vue si possible.

Mรชme avec ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ=F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ , une copie peut รชtre gรฉnรฉrรฉe ร  la place d’une vue en fonction de la disposition de la mรฉmoire. Sachez qu’il n’est pas garanti qu’une vue soit toujours crรฉรฉe.

Convertir D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ en S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ

La rรฉcupรฉration d’une ligne ou d’une colonne d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ en tant que S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ gรฉnรจre gรฉnรฉralement une vue du D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ d’origine .

df = pd.DataFrame({'col0': [0, 1, 2], 'col1': [3, 4, 5], 'col2': [6, 7, 8]}, index=['row0', 'row1', 'row2']) print(df) # col0 col1 col2 # row0 0 3 6 # row1 1 4 7 # row2 2 5 8 s = df['col0'] s['row0'] = 10 print(s) # row0 10 # row1 1 # row2 2 # Name: col0, dtype: int64 print(df) # col0 col1 col2 # row0 10 3 6 # row1 1 4 7 # row2 2 5 8 

Crรฉez une copie avec ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ() pour la gรฉrer sรฉparรฉment.

s_copy = df['col1'].copy() s_copy['row0'] = 100 print(s_copy) # row0 100 # row1 4 # row2 5 # Name: col1, dtype: int64 print(df) # col0 col1 col2 # row0 10 3 6 # row1 1 4 7 # row2 2 5 8 

Lorsque vous utilisez une liste pour la sรฉlection, une copie est crรฉรฉe au lieu d’une vue.

s_list = df.loc[['row0', 'row2'], 'col2'] s_list['row0'] = 1000 print(s_list) # row0 1000 # row2 8 # Name: col2, dtype: int64 print(df) # col0 col1 col2 # row0 10 3 6 # row1 1 4 7 # row2 2 5 8 

Lors de la sรฉlection d’une partie d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ avec ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] ou ๐ขโ€Œ๐ฅโ€Œ๐จโ€Œ๐œโ€Œ[] pour crรฉer un nouveau D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , la crรฉation d’une vue ou d’une copie dรฉpend du type de spรฉcification de plage utilisรฉ, comme les valeurs scalaires, les listes ou les tranches.