sábado, 3 de abril de 2021

Como leio e escrevo dados tabulares com pandas?

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.

  • Quero analisar os dados dos passageiros do Titanic, disponíveis como um arquivo CSV.

    In [2]: titanic = pd.read_csv("data/titanic.csv")
    

    O pandas fornece a função read_csv() que ler dados armazenados num arquivo csv e com os dados desse arquivo cria um DataFrame pandas. O pandas suporta muitos formatos de arquivo ou fontes de dados diferentes fora da caixa (csv, excel, sql, json, parquet, ...), cada um deles com o prefixo read_*.

Certifique-se de sempre verificar os dados após lê-los. Ao exibir um DataFrame, a primeira e as últimas 5 linhas serão mostradas por padrão:

In [3]: titanic
Out[3]: 
     PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0              1         0       3  ...   7.2500   NaN         S
1              2         1       1  ...  71.2833   C85         C
2              3         1       3  ...   7.9250   NaN         S
3              4         1       1  ...  53.1000  C123         S
4              5         0       3  ...   8.0500   NaN         S
..           ...       ...     ...  ...      ...   ...       ...
886          887         0       2  ...  13.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
888          889         0       3  ...  23.4500   NaN         S
889          890         1       1  ...  30.0000  C148         C
890          891         0       3  ...   7.7500   NaN         Q

[891 rows x 12 columns]
  • Quero ver as primeiras 8 linhas de um DataFrame do pandas.

    In [4]: titanic.head(8)
    Out[4]: 
       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            6         0       3                                   Moran, Mr. James  ...            330877   8.4583    NaN         Q
    6            7         0       1                            McCarthy, Mr. Timothy J  ...             17463  51.8625    E46         S
    7            8         0       3                     Palsson, Master. Gosta Leonard  ...            349909  21.0750    NaN         S
    
    [8 rows x 12 columns]
    

    Para ver as primeiras N linhas de um DataFrame, use o método head() com o número necessário de linhas (neste caso 8) como argumento.

Observação

Em vez disso, está interessado nas últimas N linhas? pandas também fornece o método tail(). Por exemplo, titanic.tail(10) retornará as últimas 10 linhas do DataFrame.

Uma verificação de como o pandas interpreta cada um dos tipos de dados da coluna pode ser feita solicitando o atributo dtypes do pandas:

In [5]: titanic.dtypes
Out[5]: 
PassengerId      int64
Survived         int64
Pclass           int64
Name            object
Sex             object
Age            float64
SibSp            int64
Parch            int64
Ticket          object
Fare           float64
Cabin           object
Embarked        object
dtype: object

Para cada uma das colunas, o tipo de dados usado é listado. Os tipos de dados DataFrame são integers (int64), floats (float64) e strings (object).

Observação

Ao solicitar o atributo dtypes, não são usados ​​colchetes! dtypes é um atributo do DataFrame e das Series. Os atributos do DataFrame ou Series não precisam de colchetes. Os atributos representam uma característica de um DataFrame / Series, enquanto um método (que requer colchetes) faz algo com o DataFrame / Series conforme apresentado no primeiro tutorial.

  • Meu colega solicitou os dados do Titanic em uma planilha.

    In [6]: titanic.to_excel("titanic.xlsx", sheet_name="passengers", index=False)
    

    Enquanto as funções com o prefixo read_* são usadas para ler dados e criar um DataFrame ou Series pandas, os métodos com o prefixo to_* são usados ​​para armazenar um DataFrame ou Series num arquivo (por exemplo, CSV ou xls). O método to_excel() armazena os dados como um arquivo Excel. No exemplo aqui, o sheet_name é nomeado passengers em vez do padrão Sheet1 . Ao definir o índice de linha como index=False, os rótulos não são salvos na planilha.

A função de leitura equivalente read_excel() recarregará os dados em um DataFrame:

In [7]: titanic = pd.read_excel("titanic.xlsx", sheet_name="passengers")
In [8]: titanic.head()
Out[8]: 
   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]
  • Estou interessado em um resumo técnico de um DataFrame.

    In [9]: titanic.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 891 entries, 0 to 890
    Data columns (total 12 columns):
     #   Column       Non-Null Count  Dtype  
    ---  ------       --------------  -----  
     0   PassengerId  891 non-null    int64  
     1   Survived     891 non-null    int64  
     2   Pclass       891 non-null    int64  
     3   Name         891 non-null    object 
     4   Sex          891 non-null    object 
     5   Age          714 non-null    float64
     6   SibSp        891 non-null    int64  
     7   Parch        891 non-null    int64  
     8   Ticket       891 non-null    object 
     9   Fare         891 non-null    float64
     10  Cabin        204 non-null    object 
     11  Embarked     889 non-null    object 
    dtypes: float64(2), int64(5), object(5)
    memory usage: 83.7+ KB
    

    O método info() fornece informações técnicas sobre o DataFrame, então vamos explicar a saída com mais detalhes:

    • É realmente um DataFrame.

    • Existem 891 entradas, ou seja, 891 linhas.

    • Cada linha possui um rótulo de linha (também conhecido como index) com valores que variam de 0 a 890.

    • A tabela possui 12 colunas. A maioria das colunas tem um valor para cada uma das linhas (todos os 891 valores têm non-null). Algumas colunas têm valores ausentes e menos de 891 non-nullvalores.

    • As colunas Name, Sex, Cabine Embarkedconsiste de dados textuais (cordas, aka object). As outras colunas são dados numéricos com alguns deles números inteiros (aka integer) e outros são números reais (aka float)

    • O tipo de dados (caracteres, inteiros, ...) nas diferentes colunas são resumidos listando o dtypes.

    • A quantidade aproximada de RAM usada para armazenar o DataFrame também é fornecida.

LEMBRAR

  • A obtenção de dados para o pandas de muitos formatos de arquivo ou fontes de dados diferentes é suportada por funções read_*.

  • A exportação de dados de pandas é fornecida por diferentes métodos com prefixo to_*.

  • Os métodos head / tail / info e o atributo dtypes são convenientes para uma primeira verificação.

Traduzido por Acervo Lima. O original pode ser acessado aqui.

0 comentários:

Postar um comentário