Photo by Thanos Pal on Unsplash |
Introdução
As dimensões de uma série ou dataframe tem seu rotulo no objeto index. O objeto index é usado para separar as estruturas do pandas. São os indexs que rotulam cada linha e coluna, com isso podemos selecionar os dados do dataframe. A biblioteca pandas também permite selecionar dados de acordo com a posição das colunas e linhas. Podendo selecionar dados por nome ou números (posição), a biblioteca pandas fornece uma sintaxe poderosa. O que acaba torna a seleção de subconjuntos um pouco confusa.
Já vimos exemplos de seleção de dados por rótulo e posição. A lista e o dicionário do python fazem isso. Esse é um dos motivos da biblioteca pandas ser poderosa. Juntando a capacidade de acessar dados por rótulo (dicionário) e posição (lista) temos um tipo de dado muito versátil.
Seleção de dados da série com pandas
As séries e os dataframes pandas funcionam como contêiner de dados. Esses contêineres têm métodos e atributos que nos permitem selecionar os dados de várias maneiras. Os métodos e atributos fazer operações com índices para selecionar os dados. Também podemos usar os atributos iloc e loc.
Podemos selecionar dados informando a posição ou um rótulo. Usando o atributo iloc selecionamos os dados por posição, fazendo um objeto do pandas parecer com uma lista. Já usando o atributo loc, selecionamos os dados informando um rótulo, como um dicionário do python.
Esses dois atributos estão presentes nas séries e nos dataframes. Nesse tutorial vamos aprender a selecionar dados utilizando rótulos e posições. Os dois atributos aceitam valores escalares e listas.
Colocando colchetes depois de uma variável estamos fazendo uma operação de índice. Não faz diferença se é uma seleção com rótulo ou posição, tudo é operação de índice.
Você obter o dataset usado nesse tutorial aqui.
Selecionando dados utilizando rótulo e posição
Vamos carregar o dataset na memoria e selecionar uma coluna usando uma operação de index. Nesse primeiro exemplo vamos usar o rótulo da coluna.
>>> import pandas as pd >>> animelist = pd.read_csv(‘animelist.csv’) >>> animelist['title'] 0 Inu x Boku SS 1 Seto no Hanayome 2 Shugo Chara!! Doki 3 Princess Tutu 4 Bakuman. 3rd Season ... 14473 Gutchonpa Omoshiro Hanashi 14474 Geba Geba Shou Time! 14475 Godzilla: Hoshi wo Kuu Mono 14476 Nippon Mukashibanashi: Sannen Netarou 14477 Senjou no Valkyria Special Name: title, Length: 14478, dtype: object
Podemos ter o mesmo resultado com o atributo loc
.
>>> animelist.loc[:, 'title'] 0 Inu x Boku SS 1 Seto no Hanayome 2 Shugo Chara!! Doki 3 Princess Tutu 4 Bakuman. 3rd Season ... 14473 Gutchonpa Omoshiro Hanashi 14474 Geba Geba Shou Time! 14475 Godzilla: Hoshi wo Kuu Mono 14476 Nippon Mukashibanashi: Sannen Netarou 14477 Senjou no Valkyria Special Name: title, Length: 14478, dtype: object
Com o atributo loc
podemos selecionar linhas e colunas passando o rótulo do índice. Se apenas um valor for passado o atributo vai retornar uma linha com os dados de cada coluna. Se passamos dois valores podemos selecionar as linhas e as colunas, e ainda podemos definir o espaçamento.
# selecionando uma linha # passamos um número inteiro porque o índice é de inteiros e não strings >>> animelist.loc[12] anime_id 11123 title Sekaiichi Hatsukoi 2 title_english Sekai Ichi Hatsukoi - World's Greatest Fi... title_japanese 世界一初恋 2 title_synonyms Sekai-ichi Hatsukoi 2, Sekai'ichi Hatsukoi 2 image_url https://myanimelist.cdn-dena.com/images/anime/... type TV source Manga episodes 12 status Finished Airing airing False aired_string Oct 8, 2011 to Dec 24, 2011 aired {'from': '2011-10-08', 'to': '2011-12-24'} duration 24 min. per ep. rating PG-13 - Teens 13 or older score 8.23 scored_by 53285 rank 288 popularity 945 members 89543 favorites 726 background An event to show ep.1 of season 2 (along with ... premiered Fall 2011 broadcast Unknown related {'Adaptation': [{'mal_id': 10309, 'type': 'man... producer Lantis, Kadokawa Shoten, AT-X, KlockWorx licensor Funimation studio Studio Deen genre Comedy, Drama, Romance, Shounen Ai opening_theme ['"Sekai no Hate ni Kimi ga Itemo" (世界の果てに君がいて... ending_theme ['"Aikotoba" (アイコトバ) by Sakura Merry-Men'] Name: 12, dtype: object >>> animelist.loc[12:32, 'title':'rank'] title ... rank 12 Sekaiichi Hatsukoi 2 ... 288.0 13 Tonari no Kaibutsu-kun ... 1093.0 14 Bleach ... 693.0 15 Chobits ... 1546.0 16 Kimi ni Todoke ... 400.0 17 Naruto: Shippuuden ... 337.0 18 Ranma ½ ... 802.0 19 Toradora! ... 174.0 20 Bakuman. 2nd Season ... 108.0 21 Gakuen Alice ... 941.0 22 Skip Beat! ... 282.0 23 Chihayafuru 2 ... 116.0 24 Shounen Onmyouji ... 1158.0 25 Chihayafuru ... 246.0 26 Itazura na Kiss ... 1108.0 27 Beelzebub ... 528.0 28 Hanasakeru Seishounen ... 753.0 29 SKET Dance ... 213.0 30 B-gata H-kei ... 3193.0 31 Crayon Shin-chan ... 1032.0 32 Fruits Basket ... 939.0 [21 rows x 17 columns]
No ultimo exemplo selecionamos linhas e colunas. Selecionamos os dados da linha numero doze até a linha trinta e dois. As colunas, selecionamos da coluna title até a coluna rank. O atributo iloc
funciona do mesmo modo, a diferença é que esse atributo não aceita rótulos. O atributo iloc
só aceita posições.
>>> animelist.iloc[12:32, 1:17] title ... scored_by 12 Sekaiichi Hatsukoi 2 ... 53285 13 Tonari no Kaibutsu-kun ... 281448 14 Bleach ... 433097 15 Chobits ... 175388 16 Kimi ni Todoke ... 212710 17 Naruto: Shippuuden ... 385179 18 Ranma ½ ... 59911 19 Toradora! ... 557898 20 Bakuman. 2nd Season ... 122090 21 Gakuen Alice ... 33244 22 Skip Beat! ... 90699 23 Chihayafuru 2 ... 62720 24 Shounen Onmyouji ... 14619 25 Chihayafuru ... 89081 26 Itazura na Kiss ... 91187 27 Beelzebub ... 136105 28 Hanasakeru Seishounen ... 16772 29 SKET Dance ... 44132 30 B-gata H-kei ... 142827 31 Crayon Shin-chan ... 17683 [20 rows x 16 columns]
Para selecionar, do primeiro elemento até um determinado, é só omitir a posição ou rótulo de inicio. Por exemplo: animelist.iloc[:32, 1:17]
. Se você quiser definir o inicio e selecionar até o ultimo elemento é só omitir a posição ou rotulo do último elemento: animelist.loc[12:, ‘rank’:]
.
0 comentários:
Postar um comentário