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๐โ๐ซโ๐ขโ๐โ๐ฌโ .
- Convertir S๐โ๐ซโ๐ขโ๐โ๐ฌโ en D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ
- Gรฉnรฉrer D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ร partir de plusieurs S๐โ๐ซโ๐ขโ๐โ๐ฌโ
- Convertir D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ en S๐โ๐ซโ๐ขโ๐โ๐ฌโ
- Vues et copies
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.
- Convertir pandas.DataFrame, Series et numpy.ndarray entre eux
- Convertir pandas.DataFrame, Series et lister les uns vers les autres
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.
- pandas : Sรฉlectionner des lignes/colonnes par index (numรฉros et noms)
- pandas : obtenir/dรฉfinir des valeurs avec loc, iloc, at, iat
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.
