Como (e por que) fazer uma cópia do pandas dataframe
Cada vez que você cria um subconjunto de um DataFrame do pandas e depois modifica o subconjunto, o DataFrame original também será modificado.
Por esse motivo, é sempre uma boa ideia usar .copy() ao criar subconjuntos, para que as alterações feitas no subconjunto não sejam feitas também no DataFrame original.
Os exemplos a seguir mostram como (e por que) fazer uma cópia de um DataFrame do pandas durante a criação de subconjuntos.
Exemplo 1: subconjunto de um DataFrame sem cópia
Suponha que temos o seguinte DataFrame do pandas:
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
Agora suponha que criamos um subconjunto contendo apenas as primeiras quatro linhas do DataFrame original:
#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
Se alterarmos algum dos valores do subconjunto, o valor do DataFrame original também será alterado:
#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
Observe que o primeiro valor da coluna da equipe foi alterado de “A” para “X” tanto no subconjunto DataFrame quanto no DataFrame original.
Isso ocorre porque não fizemos uma cópia do DataFrame original.
Exemplo 2: subconjunto de um DataFrame com cópia
Vamos supor novamente que temos o seguinte DataFrame do pandas:
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
Vamos supor novamente que criamos um subconjunto que contém apenas as primeiras quatro linhas do DataFrame original, mas desta vez usamos .copy() para fazer uma cópia do DataFrame original:
#define subsetted DataFrame df_subset = df[0:4]. copy ()
Agora suponha que alteramos o primeiro valor da coluna team do subconjunto 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
Observe que o primeiro valor da coluna team foi alterado de “A” para “X” apenas no subconjunto DataFrame.
O DataFrame original permanece intacto, pois usamos .copy() para fazer uma cópia dele ao criar o subconjunto.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras operações comuns em pandas:
Como excluir linhas no Pandas DataFrame com base na condição
Como filtrar um DataFrame do Pandas em múltiplas condições
Como usar o filtro “NOT IN” no Pandas DataFrame