Как читать и записывать табличные данные?¶
In [1]: import pandas as pd
- Данные о Титанике
В этом руководстве используется набор данных Titanic, сохраненный в формате CSV. Данные состоят из следующих столбцов:
PassengerId: Идентификатор каждого пассажира.
Survived: Имеет значения 0 и 1. 0 для не выживших и 1 для выживших.
Pclass: Существует 3 класса: класс 1, класс 2 и класс 3.
Name: Имя пассажира.
Sex: Пол пассажира.
Age: Возраст пассажира.
SibSp: Указание на то, что у пассажира есть братья, сестры и супруг.
Parch: Пассажир один или с семьей.
Ticket: Номер билета пассажира.
Fare: Указание тарифа.
Cabin: Каюта пассажира.
Embarked: Категория причала.
Я хочу проанализировать данные о пассажирах Титаника, доступные в виде CSV-файла.
In [2]: titanic = pd.read_csv("data/titanic.csv")
pandas предоставляет функцию
read_csv()
для чтения данных, хранящихся в виде CSV-файла, в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 строк 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 строк, а не первые? Используйте метод tail()
. Например, titanic.tail(10)
вернет последние 10 строк DataFrame.
Проверить, как pandas интерпретирует каждый из типов данных столбца, можно, запросив атрибут pandas dtypes
:
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
, как представлено в первом уроке.
Мой коллега запросил данные Титаника в виде электронной таблицы.
In [6]: titanic.to_excel("titanic.xlsx", sheet_name="passengers", index=False)
В то время как функции
read_*
используются для чтения данных в pandas, методыto_*
используются для хранения данных. Методto_excel()
сохраняет данные в виде файла Excel. В приведенном здесь примереsheet_name
имеет значение passengers, а не предусмотренное по умолчанию 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() <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
Метод
info()
предоставляет техническую информацию оDataFrame
, так что давайте объясним результаты более подробно:Это действительно
DataFrame
.Имеется 891 запись, то есть 891 строка.
Каждая строка имеет метку строки (
index
) со значениями в диапазоне от 0 до 890.В таблице 12 столбцов. Большинство столбцов имеют значения в каждой из строк (все 891 значения не
non-null
). В некоторых столбцах значения отсутствуют, количествоnon-null
менее 891.Столбцы
Name
,Sex
,Cabin
иEmbarked
состоят из текстовых данных (строки, илиobject
). Другие столбцы представляют собой числовые данные, некоторые из них представляют собой целые числа (integer
), некоторые — вещественные числа (float
).Типы данных (символы, целые числа и так далее) в разных столбцах суммируются путем перечисления
dtypes
.Также указывается приблизительный объем оперативной памяти, используемой для хранения DataFrame.
ЗАПОМНИТЕ
Получение данных в pandas из файлов разных форматов или источников данных поддерживается функциями
read_*
.Экспорт данных из pandas осуществляется разными методами
to_*
.Методы
head
/tail
/info
и атрибутdtypes
удобны для первой проверки.
Полный обзор возможностей ввода и вывода в pandas см. в разделе руководства пользователя о функциях чтения и записи.