Comment copier un tableau de données DataFrame avec pandas ?

Published: 15 novembre 2019

DMCA.com Protection Status

Exemple de comment copier un tableau de données DataFrame avec pandas

Créer une dataframe

Pour commencer créons une simple dataframe:

>>> import pandas as pd
>>> import numpy as np
>>> data = np.random.randint(100, size=(10,5))
>>> df = pd.DataFrame(data=data,columns=['a','b','c','d','e'])
>>> df
    a   b   c   d   e
0  42  94   3  22  28
1   0  85  93  43  18
2  70  10  98  19  26
3  54  72  89  51  61
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

Créer une copie de la dataframe

Pour créer une copie de la dataframe, il existe la fonction pandas [pandas.DataFrame.copy]:

>>> df2 = df.copy()
>>> df2
    a   b   c   d   e
0  42  94   3  22  28
1   0  85  93  43  18
2  70  10  98  19  26
3  54  72  89  51  61
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

Maintenant si on change par exemple une ligne de la copie

>>> df2.iloc[3,:] = 0
>>> df2
    a   b   c   d   e
0  42  94   3  22  28
1   0  85  93  43  18
2  70  10  98  19  26
3   0   0   0   0   0
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

la dataframe de départ n'est pas modifiée:

>>> df
    a   b   c   d   e
0  42  94   3  22  28
1   0  85  93  43  18
2  70  10  98  19  26
3  54  72  89  51  61
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

Un autre exemple en modifiant des colonnes

>>> df2.iloc[:,[2,4]] = 0
>>> df2
    a   b  c   d  e
0  42  94  0  22  0
1   0  85  0  43  0
2  70  10  0  19  0
3   0   0  0   0  0
4  13  44  0  28  0
5  79   4  0  33  0
6  69  37  0  89  0
7  17  82  0   2  0
8  79  78  0   0  0
9  84   2  0  27  0

Même chose la dataframe de départ n'est pas modifiée:

>>> df
    a   b   c   d   e
0  42  94   3  22  28
1   0  85  93  43  18
2  70  10  98  19  26
3  54  72  89  51  61
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

Dataframe avec plusieurs noms

Si on ajoute l'option deep=False comme ceci:

>>> df3 = df.copy(deep=False)

on obtient pas vraiment une copie, cela reste la même dataframe avec un nom différent. Si on modifie df3

>>> df3.iloc[[0,1,2],:] = 0
>>> df3
    a   b   c   d   e
0   0   0   0   0   0
1   0   0   0   0   0
2   0   0   0   0   0
3  54  72  89  51  61
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

on modifie aussi la la dataframe de départ:

>>> df
    a   b   c   d   e
0   0   0   0   0   0
1   0   0   0   0   0
2   0   0   0   0   0
3  54  72  89  51  61
4  13  44  94  28  34
5  79   4  89  33  81
6  69  37  84  89  59
7  17  82  84   2  60
8  79  78  44   0  60
9  84   2  82  27  27

Note: même chose si on utilise l'opérateur =

>>> df4 = df

Références