Este tutorial usa o conjunto de dados do Titanic, armazenado como CSV. Os dados consistem nas seguintes colunas de dados:
- PassengerId: Id de cada passageiro.
- Survived: Este recurso tem valores 0 e 1. 0 para não sobreviveu e 1 para sobreviveu.
- Pclass: Existem 3 classes: Classe 1, Classe 2 e Classe 3.
- Name: Nome do passageiro.
- Sex: gênero do passageiro.
- Age: Idade do passageiro.
- SibSp: Indicação de que o passageiro tem irmãos e cônjuge.
- Parch: se o passageiro está sozinho ou tem família.
- Ticket: Número do bilhete do passageiro.
- Fare: Indicando a tarifa.
- Cabin: A cabine do passageiro.
- Embarked: a categoria embarcada.
O arquivo csv pode ser baixado aqui.
Como seleciono colunas específicas de um DataFrame
?
-
Estou interessado na idade dos passageiros do Titanic.
In [4]: ages = titanic["Age"] In [5]: ages.head() Out[5]: 0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 Name: Age, dtype: float64
Para selecionar uma única coluna, use colchetes
[]
com o nome da coluna de interesse.
Cada coluna em um DataFrame
é uma Series
. Como uma única coluna é selecionada, o objeto retornado é uma Series
pandas. Podemos verificar isso verificando o tipo de saída:
In [6]: type(titanic["Age"]) Out[6]: pandas.core.series.Series
E dê uma olhada no shape
(forma) da saída:
In [7]: titanic["Age"].shape Out[7]: (891,)
DataFrame.shape
é um atributo (lembre-se do tutorial de leitura e escrita, não use parênteses para atributos) de uma Series
pandas e que DataFrame
contém o número de linhas e colunas: (nrows, ncolumns). Uma série de pandas é unidimensional e apenas o número de linhas é retornado.
-
Estou interessado na idade e no sexo dos passageiros do Titanic.
In [8]: age_sex = titanic[["Age", "Sex"]] In [9]: age_sex.head() Out[9]: Age Sex 0 22.0 male 1 38.0 female 2 26.0 female 3 35.0 female 4 35.0 male
Para selecionar várias colunas, use uma lista de nomes de colunas dentro dos colchetes de seleção
[]
.
Observação
Os colchetes internos definem uma lista Python com nomes de colunas, enquanto os colchetes externos são usados para selecionar os dados de um DataFrame
pandas, como visto no exemplo anterior.
O tipo de dados retornado é um DataFrame pandas:
In [10]: type(titanic[["Age", "Sex"]]) Out[10]: pandas.core.frame.DataFrame
In [11]: titanic[["Age", "Sex"]].shape Out[11]: (891, 2)
A seleção retornou um DataFrame
com 891 linhas e 2 colunas. Lembre-se de que o DataFrame
é bidimensional com dimensão de linha e coluna.
Como posso filtrar linhas específicas de um DataFrame
?
-
Estou interessado nos passageiros com mais de 35 anos.
In [12]: above_35 = titanic[titanic["Age"] > 35] In [13]: above_35.head() Out[13]: PassengerId Survived Pclass Name ... Ticket Fare Cabin Embarked 1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... ... PC 17599 71.2833 C85 C 6 7 0 1 McCarthy, Mr. Timothy J ... 17463 51.8625 E46 S 11 12 1 1 Bonnell, Miss. Elizabeth ... 113783 26.5500 C103 S 13 14 0 3 Andersson, Mr. Anders Johan ... 347082 31.2750 NaN S 15 16 1 2 Hewlett, Mrs. (Mary D Kingcome) ... 248706 16.0000 NaN S [5 rows x 12 columns]
Para selecionar linhas com base em uma expressão condicional, use uma condição dentro dos colchetes de seleção
[]
.
A condição dentro dos colchetes de seleção titanic["Age"] > 35
verifica para quais linhas a coluna Age
tem um valor maior que 35:
In [14]: titanic["Age"] > 35 Out[14]: 0 False 1 True 2 False 3 False 4 False ... 886 False 887 False 888 False 889 False 890 False Name: Age, Length: 891, dtype: bool
A saída da expressão condicional ( >
, mas também ==
, !=
, <
, <=
, ... iria funcionar) é realmente uma Series
pandas de valores booleanos (quer True
ou False
) com o mesmo número de linhas que o DataFrame
original. Essa Series
de valores booleanos podem ser usados para filtrar o DataFrame
colocando-o entre os colchetes de seleção []
. Apenas as linhas para as quais o valor é True
serão selecionadas.
Já sabemos que o DataFrame
original Titanic consiste em 891 linhas. Vamos dar uma olhada no número de linhas que satisfazem a condição, verificando o atributo shape
do DataFrame
above_35
:
In [15]: above_35.shape Out[15]: (217, 12)
-
Estou interessado nos passageiros do Titanic da classe 2 e 3 da cabine.
In [16]: class_23 = titanic[titanic["Pclass"].isin([2, 3])] In [17]: class_23.head() Out[17]: PassengerId Survived Pclass Name Sex ... Parch Ticket Fare Cabin Embarked 0 1 0 3 Braund, Mr. Owen Harris male ... 0 A/5 21171 7.2500 NaN S 2 3 1 3 Heikkinen, Miss. Laina female ... 0 STON/O2. 3101282 7.9250 NaN S 4 5 0 3 Allen, Mr. William Henry male ... 0 373450 8.0500 NaN S 5 6 0 3 Moran, Mr. James male ... 0 330877 8.4583 NaN Q 7 8 0 3 Palsson, Master. Gosta Leonard male ... 1 349909 21.0750 NaN S [5 rows x 12 columns]
Semelhante à expressão condicional, a função condicional
isin()
retornaTrue
para cada linha em que os valores estão na lista fornecida. Para filtrar as linhas com base em tal função, use a função condicional dentro dos colchetes de seleção[]
. Nesse caso, a condição dentro dos colchetes de seleçãotitanic["Pclass"].isin([2, 3])
verifica quais linhas da colunaPclass
é 2 ou 3.
O acima é equivalente a filtrar por linhas para as quais a classe é 2 ou 3 e combinar as duas instruções com um operador (ou) |
:
In [18]: class_23 = titanic[(titanic["Pclass"] == 2) | (titanic["Pclass"] == 3)] In [19]: class_23.head() Out[19]: PassengerId Survived Pclass Name Sex ... Parch Ticket Fare Cabin Embarked 0 1 0 3 Braund, Mr. Owen Harris male ... 0 A/5 21171 7.2500 NaN S 2 3 1 3 Heikkinen, Miss. Laina female ... 0 STON/O2. 3101282 7.9250 NaN S 4 5 0 3 Allen, Mr. William Henry male ... 0 373450 8.0500 NaN S 5 6 0 3 Moran, Mr. James male ... 0 330877 8.4583 NaN Q 7 8 0 3 Palsson, Master. Gosta Leonard male ... 1 349909 21.0750 NaN S [5 rows x 12 columns]
Observação
Ao combinar várias instruções condicionais, cada condição deve estar entre parênteses ()
. Além disso, você não pode usar or
/ and
você precisa usar o operador or
(|
) e o operador and
(&
).
-
Quero trabalhar com dados de passageiros cuja idade é conhecida.
In [20]: age_no_na = titanic[titanic["Age"].notna()] In [21]: age_no_na.head() Out[21]: PassengerId Survived Pclass Name ... Ticket Fare Cabin Embarked 0 1 0 3 Braund, Mr. Owen Harris ... A/5 21171 7.2500 NaN S 1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... ... PC 17599 71.2833 C85 C 2 3 1 3 Heikkinen, Miss. Laina ... STON/O2. 3101282 7.9250 NaN S 3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) ... 113803 53.1000 C123 S 4 5 0 3 Allen, Mr. William Henry ... 373450 8.0500 NaN S [5 rows x 12 columns]
A função condicional
notna()
retornaTrue
para cada linha, os valores não são umNull
valor. Como tal, isso pode ser combinado com os colchetes de seleção[]
para filtrar a tabela de dados.
Você pode se perguntar o que realmente mudou, já que as 5 primeiras linhas ainda são os mesmos valores. Uma maneira de verificar é verificar se a forma mudou:
In [22]: age_no_na.shape Out[22]: (714, 12)
Como seleciono linhas e colunas específicas de um DataFrame
?
-
Estou interessado nos nomes dos passageiros com mais de 35 anos.
In [23]: adult_names = titanic.loc[titanic["Age"] > 35, "Name"] In [24]: adult_names.head() Out[24]: 1 Cumings, Mrs. John Bradley (Florence Briggs Th... 6 McCarthy, Mr. Timothy J 11 Bonnell, Miss. Elizabeth 13 Andersson, Mr. Anders Johan 15 Hewlett, Mrs. (Mary D Kingcome) Name: Name, dtype: object
Neste caso, um subconjunto de linhas e colunas é feito de uma vez e apenas usar colchetes de seleção
[]
não é mais suficiente. Os operadoresloc
/iloc
são necessários na frente dos colchetes de seleção[]
. Ao usarloc
/iloc
, a parte antes da vírgula são as linhas que você deseja e a parte depois da vírgula são as colunas que você deseja selecionar.
Ao usar os nomes das colunas, rótulos de linha ou uma expressão de condição, use o operador loc
na frente dos colchetes de seleção []
. Para a parte antes e depois da vírgula, você pode usar um único rótulo, uma lista de rótulos, uma fatia de rótulos, uma expressão condicional ou dois pontos. Usar dois pontos especifica que você deseja selecionar todas as linhas ou colunas.
-
Estou interessado nas linhas 10 a 25 e nas colunas 3 a 5.
In [25]: titanic.iloc[9:25, 2:5] Out[25]: Pclass Name Sex 9 2 Nasser, Mrs. Nicholas (Adele Achem) female 10 3 Sandstrom, Miss. Marguerite Rut female 11 1 Bonnell, Miss. Elizabeth female 12 3 Saundercock, Mr. William Henry male 13 3 Andersson, Mr. Anders Johan male .. ... ... ... 20 2 Fynney, Mr. Joseph J male 21 2 Beesley, Mr. Lawrence male 22 3 McGowan, Miss. Anna "Annie" female 23 1 Sloper, Mr. William Thompson male 24 3 Palsson, Miss. Torborg Danira female [16 rows x 3 columns]
Novamente, um subconjunto de linhas e colunas é feito de uma vez e apenas usar colchetes de seleção
[]
não é mais suficiente. Quando estiver especificamente interessado em certas linhas e / ou colunas com base em sua posição na tabela, use o operadoriloc
na frente dos colchetes de seleção[]
.
Ao selecionar linhas e / ou colunas específicas com loc
ou iloc
, novos valores podem ser atribuídos aos dados selecionados. Por exemplo, para atribuir o nome anonymous
aos 3 primeiros elementos da terceira coluna:
In [26]: titanic.iloc[0:3, 3] = "anonymous" In [27]: titanic.head() Out[27]: PassengerId Survived Pclass Name ... Ticket Fare Cabin Embarked 0 1 0 3 anonymous ... A/5 21171 7.2500 NaN S 1 2 1 1 anonymous ... PC 17599 71.2833 C85 C 2 3 1 3 anonymous ... STON/O2. 3101282 7.9250 NaN S 3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) ... 113803 53.1000 C123 S 4 5 0 3 Allen, Mr. William Henry ... 373450 8.0500 NaN S [5 rows x 12 columns]
LEMBRAR
-
Ao selecionar subconjuntos de dados, colchetes
[]
são usados. -
Dentro desses colchetes, você pode usar um único rótulo de coluna / linha, uma lista de rótulos de coluna / linha, uma fatia de rótulos, uma expressão condicional ou dois pontos.
-
Selecione linhas e / ou colunas específicas usando
loc
ao usar os nomes de linha e coluna. -
Selecione linhas e / ou colunas específicas usando
iloc
ao usar as posições na tabela. -
Você pode atribuir novos valores a uma seleção com base em
loc
/iloc
.
Traduzido por Acervo Lima. O original pode ser acessado aqui.
0 comentários:
Postar um comentário