Jak (i dlaczego) wykonać kopię pandas dataframe


Za każdym razem, gdy utworzysz podzbiór ramki DataFrame pandy, a następnie zmodyfikujesz podzbiór, oryginalna ramka DataFrame również zostanie zmodyfikowana.

Z tego powodu zawsze dobrze jest używać funkcji .copy() podczas tworzenia podzbiorów, aby zmiany wprowadzone w podzbiorze nie zostały wprowadzone także w oryginalnej ramce DataFrame.

Poniższe przykłady pokazują, jak (i dlaczego) utworzyć kopię ramki DataFrame pandy podczas podzbioru.

Przykład 1: Podzbiór ramki danych bez kopii

Załóżmy, że mamy następującą ramkę DataFrame pand:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Załóżmy teraz, że tworzymy podzbiór zawierający tylko pierwsze cztery wiersze oryginalnej ramki DataFrame:

 #define subsetted DataFrame
df_subset = df[0:4]

#view subsetted DataFrame
print (df_subset)

  team points assists rebounds
0 A 18 5 11
1 B 22 7 8
2 C 19 7 10
3 D 14 9 6

Jeśli zmienimy którąkolwiek z wartości w podzbiorze, zmieni się także wartość oryginalnej DataFrame:

 #change first value in team column
df_subset. team [0] = ' X '

#view subsetted DataFrame
print (df_subset)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print (df)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Należy zauważyć, że pierwsza wartość kolumny zespołu została zmieniona z „A” na „X” zarówno w podzbiorze DataFrame , jak i oryginalnej ramce DataFrame.

Dzieje się tak, ponieważ nie utworzyliśmy kopii oryginalnej ramki DataFrame.

Przykład 2: Podzbiór ramki danych za pomocą kopii

Załóżmy jeszcze raz, że mamy następującą ramkę DataFrame pandy:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Załóżmy ponownie, że tworzymy podzbiór zawierający tylko pierwsze cztery wiersze oryginalnej ramki DataFrame, ale tym razem używamy .copy() w celu utworzenia kopii oryginalnej ramki DataFrame:

 #define subsetted DataFrame
df_subset = df[0:4]. copy ()

Załóżmy teraz, że zmieniamy pierwszą wartość kolumny zespołu podzbioru DataFrame:

 #change first value in team column
df_subset. team [0] = ' X '

#view subsetted DataFrame
print (df_subset)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Należy zauważyć, że pierwsza wartość kolumny zespołu została zmieniona z „A” na „X” tylko w podzbiorze DataFrame.

Oryginalna ramka DataFrame pozostaje nienaruszona, ponieważ podczas tworzenia podzbioru użyliśmy metody .copy() do utworzenia jej kopii.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje na pandach:

Jak usunąć wiersze w Pandas DataFrame na podstawie warunku
Jak filtrować ramkę danych Pandas pod wieloma warunkami
Jak korzystać z filtra „NIE W” w Pandas DataFrame

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *