In [1]: import pandas as pd
Данные, используемые в этом руководстве:
  • Этот учебник использует набор данных Titanic, сохраненный как CSV. Данные состоят из следующих столбцов данных:

    • PassengerId: Идентификатор каждого пассажира.

    • Выжил: Указание, выжил ли пассажир. 0 для да и 1 для нет.

    • Pclass: Один из 3 классов билетов: Класс 1, Класс 2 и Класс 3.

    • Name: Имя пассажира.

    • Sex: Пол пассажира.

    • Age: Возраст пассажира в годах.

    • SibSp: Количество братьев, сестер или супругов на борту.

    • Parch: Количество родителей или детей на борту.

    • Ticket: Номер билета пассажира.

    • Fare: Указывает стоимость проезда.

    • Cabin: Номер каюты пассажира.

    • Embarked: Порт посадки.

    К исходным данным

Как читать и записывать табличные данные?#

../../_images/02_io_readwrite.svg
  • Я хочу проанализировать данные пассажиров Титаника, доступные в виде CSV-файла.

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

    pandas предоставляет read_csv() функция для чтения данных, сохранённых в csv-файле, в pandas DataFrame. pandas поддерживает множество различных форматов файлов или источников данных из коробки (csv, excel, sql, json, parquet, …), каждый из них с префиксом read_*.

Всегда проверяйте данные после их чтения. При отображении DataFrame, по умолчанию будут показаны первые и последние 5 строк:

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]
  • Я хочу увидеть первые 8 строк pandas DataFrame.

    In [4]: titanic.head(8)
    Out[4]: 
       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
    5            6         0       3  ...   8.4583   NaN         Q
    6            7         0       1  ...  51.8625   E46         S
    7            8         0       3  ...  21.0750   NaN         S
    
    [8 rows x 12 columns]
    

    Чтобы увидеть первые N строк DataFrame, используйте head() метод с требуемым количеством строк (в данном случае 8) в качестве аргумента.

Примечание

Интересуют последние N строк? pandas также предоставляет tail() метод. Например, titanic.tail(10) вернет последние 10 строк DataFrame.

Проверку того, как pandas интерпретировал типы данных каждого столбца, можно выполнить, запросив pandas dtypes attribute:

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

Для каждого из столбцов указан используемый тип данных. Типы данных в этом DataFrame являются целыми числами (int64), числа с плавающей точкой (float64) и строки (object).

Примечание

При запросе dtypes, скобки не используются! dtypes является атрибутом DataFrame и Series. Атрибуты DataFrame или Series не требуют скобок. Атрибуты представляют характеристику DataFrame/Series, тогда как методы (которые требуют скобок) делать что-то с DataFrame/Series как представлено в первое руководство.

  • Мой коллега запросил данные Titanic в виде электронной таблицы.

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

    В то время как read_* функции используются для чтения данных в pandas, to_* методы используются для хранения данных. Метод to_excel() метод сохраняет данные в виде файла Excel. В этом примере sheet_name называется пассажиры вместо значения по умолчанию Sheet1. Установив index=False метки индекса строк не сохраняются в электронной таблице.

Эквивалентная функция чтения read_excel() перезагрузит данные в DataFrame:

In [7]: titanic = pd.read_excel("titanic.xlsx", sheet_name="passengers")
In [8]: titanic.head()
Out[8]: 
   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

[5 rows x 12 columns]
  • Меня интересует техническое резюме DataFrame

    In [9]: titanic.info()
    
    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
    

    Метод info() предоставляет техническую информацию о DataFrameпоэтому давайте подробнее объясним вывод:

    • Это действительно DataFrame.

    • Всего 891 запись, т.е. 891 строка.

    • Каждая строка имеет метку строки (также известную как index) со значениями в диапазоне от 0 до 890.

    • Таблица имеет 12 столбцов. Большинство столбцов имеют значение для каждой из строк (все 891 значение являются non-null). Некоторые столбцы содержат пропущенные значения, и менее 891 non-null значения.

    • Столбцы Name, Sex, Cabin и Embarked состоит из текстовых данных (строк, также известных как object). Остальные столбцы содержат числовые данные, некоторые из которых являются целыми числами (также известными как integer) и другие являются действительными числами (также известными как float).

    • Тип данных (символы, целые числа,…) в разных столбцах суммируется путем перечисления dtypes.

    • Также указывается примерный объем оперативной памяти, используемый для хранения DataFrame.

ПОМНИТЕ

  • Загрузка данных в pandas из различных форматов файлов или источников данных поддерживается read_* функций.

  • Экспорт данных из pandas обеспечивается различными to_*методы.

  • The head/tail/info методы и dtypes атрибут удобен для первоначальной проверки.

К руководству пользователя

Для полного обзора возможностей ввода и вывода данных в pandas и из pandas см. раздел руководства пользователя о функции чтения и записи.