Введение в Python pandas.DataFrame
Одна из первых концепций, которые мы изучаем как программисты Python, касается встроенных структур данных, таких как list
и dictionary
.
Как только вы поймете эти базовые структуры, пора добавить pandas.DataFrame
к вашему набору основ программирования на Python.
Почему pandas.DataFrame?
Потому что pandas.DataFrame
- одна из наиболее часто используемых структур данных Python, и не зря. Это экономит время и нервы, и если вы собираетесь читать, сотрудничать или заимствовать код других программистов, вы обязательно увидите DataFrames
раньше, чем позже.
Об этом руководстве
Отличный способ учиться на практике.
Этот учебник включает упражнения, призванные мягко познакомить вас с миром pandas.DataFrame
.
В руководстве используется подмножество данных из популярного набора данных Titanic (если вы изучаете науку о данных, вы увидите снова набор данных Титаник).
Вместо этого вы можете использовать свои собственные данные, просто сохраните электронную таблицу по вашему выбору в формате CSV. В противном случае, …
Загрузите CSV-файл Titanic в среду программирования Python 3:
1. Download titanic_names.csv.zip 2. Unzip titanic_names.csv.zip into your Python 3 environment
краткий обзор pandas и DataFrame
pandas
- мощный пакет Python, широко используемый для анализа данных. Это упрощает задачи по загрузке, анализу и управлению данными, которые в противном случае потребовали бы слишком много строк кода Python.
DataFrame
- это структура данных (точно так же, как list
и dictionary
- это структуры данных), включенная в пакет pandas
.
По данным сайта Pandas:
DataFrame - это двумерная помеченная структура данных со столбцами потенциально разных типов. Вы можете думать об этом как о электронной таблице или таблице SQL, или как о наборе объектов Series. Обычно это наиболее часто используемый объект pandas. Как и Series, DataFrame принимает множество различных типов ввода…
Пример представления DataFrame
Как видите, структура DataFrame
очень похожа на электронную таблицу или таблицу базы данных:
Приступим к руководству…
Импортировать данные в DataFrame
Pandas имеет множество функций чтения, которые импортируют внешний источник данных (например, текстовый файл CSV или HTML) и возвращают DataFrame
.
Используйте read_csv()
, чтобы загрузить данные Титаника из этого руководства.
# import pandas - the pd alias for pandas is a widely used standard import pandas as pd titanic_df = pd.read_csv("titanic_names.csv")
Успешный read_csv()
не имеет выхода. Посмотрим, что он создал…
Просмотр фрейма данных
3 функции и метода для создания DataFrame
are вида с высоты птичьего полета: shape
, head()
и describe()
.
Сколько строк и столбцов?
# display row and column counts titanic_df.shape
891 ряд и 6 столбцов.
Как выглядят данные?
titanic_df.head()
head()
отображает первые 5 записей. Чтобы увидеть меньше или больше записей, передайте целое число, например: head(10)
.
Примечание: в левой части таблицы DataFrame перечислены последовательные целые числа 0, 1,…, 4. Это «индекс» или «метка строки». Мы обсудим индексы немного позже в этом руководстве.
Есть ли статистика по данным?
titanic_df.describe()
describe()
выводит сводку описательной статистики. Замечает, что результат - это сам DataFrame
.
В этом примере строка count содержит количество ненулевых значений в каждом числовом столбце titanic_df. Столбец Возраст содержит 714 ненулевых значений, что означает, что в остальных 891 записях Возраст = null (без значения). Как аналитик, вы можете быть обеспокоены нулевыми значениями.
Щелкните здесь для получения более подробной статистики и методов расчета, например:
count()
,max()
,min()
,mean()
,std()
,sum()
,dtypes()
Щелкните здесь для получения дополнительных сведений о базовой структуре и метаданных.
Теперь, когда у вас есть представление о том, как выглядит DataFrame
, давайте создадим его с нуля…
Создать DataFrame
вручную
Синтаксис
pandas.DataFrame (данные, индекс, столбцы, dtype, копия)
Создайте простой DataFrame
Определите первый параметр, data
, как простой список [«A», «B», «C»]. Примите значения по умолчанию для всех остальных параметров и посмотрите, что произойдет:
pd.DataFrame(['A','B','C'])
Обратите внимание на индексы (или метки строк) слева. По умолчанию они используют последовательность диапазонов, начинающуюся с 0.
Создайте DataFrame с массивом списков
Попрактикуйтесь в использовании параметров, передавая метки индекса и столбца, и задайте тип данных float
:
pd.DataFrame( [ [1,2,3], [4,5,6], [7,8,9], [98,99,100] ], index=['Row 1','Row 2','Row 3','Row 4'], columns=['Col 1','Col 2','Col 3'], dtype=float )
Хороший.
Создайте DataFrame со словарем списков
pd.DataFrame ( {'PassengerId': [1,2,3], 'Survived': [0,1,1], 'Pclass': [3,1,3], 'Name': ['Braund, Mr. Owen Harris', 'Cumings, Mrs. John Bradley (Florence Briggs Thayer)', 'Heikkinen, Miss. Laina'], 'Sex': ['male','female','female'], 'Age': [22.0, 38.0, 26.0] } )
Идеально.
Скопируйте структуру данных в DataFrame
Другой способ создания DataFrame
- это копирование из существующей структуры данных, такой как: список словарей, нарраи / списки, Series
(структура панд) и список серий.
Копировать из списка словарей
Используйте метод from_dict()
.
titanic_dict = [ {'PassengerId': 1, 'Survived': 0, 'Pclass': 3, 'Name': 'Braund, Mr. Owen Harris', 'Sex': 'male', 'Age': 22.0}, {'PassengerId': 2, 'Survived': 1, 'Pclass': 1, 'Name': 'Cumings, Mrs. John Bradley (Florence Briggs Thayer)', 'Sex': 'female', 'Age': 38.0}, {'PassengerId': 3, 'Survived': 1, 'Pclass': 3, 'Name': 'Heikkinen, Miss. Laina', 'Sex': 'female', 'Age': 26.0} ] # Copy list of dictionaries into a DataFrame small_titanic_df = pd.DataFrame.from_dict(titanic_dict) small_titanic_df
Для получения подробной информации о
from_dict()
,from_records()
и других методах копирования данных наDataFrame
и обратно, щелкните здесь.
Выберите определенные столбцы
Есть три метода выбора столбцов из DataFrame
, и все они возвращают одинаковые результаты:
- точечная запись
dataframe.column_name
- квадратные скобки с названием столбца в виде строки
dataframe[‘column_name’]
- числовая индексация и селектор
iloc
dataframe.iloc[:, <column_number>]
(включить head()
метод для ограничения возвращаемых строк)
titanic_df.Age.head() titanic_df['Age'].head() titanic_df.iloc[:,5].head()
Я считаю, что версия с квадратными скобками является самой понятной и простой для чтения. Кроме того, менее подвержен ошибкам, чем iloc
, если столбцы переупорядочиваются, добавляются или удаляются из DataFrame
позже. Однако синтаксис нарезки iloc
удобен при выборе серии столбцов.
Выберите несколько столбцов
Включите несколько имен столбцов в список.
titanic_df[['Name','Age']].head()
Выберите определенные строки
Выделите второй набор из 5 рядов, надрезав скобки внутри.
titanic_df[5:10]
Обратите внимание, что индекс (слева) является индексом для каждой конкретной записи в DataFrame
, а не для строки таблицы результата выбора.
Эти две команды одинаковы, каждая из них возвращает первые 5 строк DataFrame
→ titanic_df.head(5)
= titanic_df[0:5]
.
Выбирать определенные столбцы и строки одновременно
Сначала перечисляются столбцы, затем нарезаются строки.
titanic_df[['Name','Age']][5:10]
Фильтровать записи по условиям
Кому на Титанике было больше 65 лет?
titanic_df[titanic_df['Age'] > 65]
Сколько человек выжило? (0 = нет, 1 = да)
titanic_df['Survived'].value_counts()
Какова была выживаемость в процентах?
titanic_df['Survived'].value_counts(normalize=True) * 100
Какой процент пожилых выжил?
titanic_df[ titanic_df["Age"] > 65 ] \ ["Survived"].value_counts(normalize=True) * 100
Не лучший показатель выживаемости для людей старше 65 лет.
Сортировать по значениям столбцов
Кто был 10 самыми молодыми?
titanic_df.sort_values('Age').head(10)
А как насчет 10 самых старых?
titanic_df.sort_values('Age', ascending=False).head(10)
Для получения дополнительной информации о нарезке и выборе данных щелкните здесь.
Группировать по столбцам
Сколько выживших и умерших, сгруппированных по мужчинам и женщинам?
Воспользуйтесь методом df.groupby ().
titanic_df.groupby(['Sex', 'Survived'])['PassengerId'].count()
Изменить данные
Обновите «Survived», преобразовав логическое значение в строку.
Помните, что с логическими значениями 0 = False и 1 = True.
Воспользуйтесь методом pandas.DataFrame.replace()
. Сначала создайте логическое значение dictionary
(boolean_d).
boolean_d = {True: 'Survived', False: 'Died'} titanic_df['Survived'] = titanic_df['Survived'].replace(boolean_d) titanic_df.head()
Индексирование
По умолчанию строки DataFrame
индексируются последовательными целыми числами, начинающимися с 0. Что, если вместо этого мы хотим проиндексировать уже существующий столбец? Например, в столбце PassengerId?
Есть несколько способов установить индекс: преобразовать существующий столбец в индекс или установить индекс при построении DataFrame
.
Преобразовать столбец в индекс
Используйте set_index()
.
set_index_titanic_df = titanic_df.set_index('PassengerId') set_index_titanic_df.head()
Индексировать DataFrame при создании
Теперь давайте повторно импортируем наши тестовые данные, чтобы снова создать titanic_df с использованием read_csv
, на этот раз явно назначив индекс вместо того, чтобы принимать индекс диапазона по умолчанию. Используйте параметр index_col
.
indexed_titanic_df = \ pd.read_csv("titanic_names.csv",index_col='PassengerId') indexed_titanic_df.head()
Индексы - это не столбцы
Здесь важно отметить: теперь, когда PassengerId является индексом, он больше не столбец в DataFrame
. Это демонстрируется функцией shape
, которая показывает, что теперь есть 5 столбцов вместо 6 предыдущих:
indexed_titanic_df.shape
Кроме того, на индекс не ссылаются как на столбец. Например, если вы попытаетесь указать PassengerId как столбец, вы получите сообщение об ошибке:
indexed_titanic_df['PassengerId']
Преобразовать индекс в столбец
Передумали индексировать этот столбец? Не беспокойся. Просто установите его обратно, используя reset_index()
:
un_indexed_titanic_df = indexed_titanic_df.reset_index() un_indexed_titanic_df.head()
Заключение (с тизером)
Этот учебник раскрывает только самую верхушку pandas.DataFrame
айсберга.
Мы даже не коснулись математики, использования apply
и applymap
для применения функций к таблицам DataFrame
, pivot
ing, мультииндексации, использования crosstab
для проверки гипотезы, слияния, перебора строк и многого другого.
Я призываю вас продолжать изучать pandas.DataFrame
и pandas
библиотеку в целом.
Прежде чем вы отправитесь, вот последний тизер ...
Построение pandas.DataFrame
Одна из лучших особенностей структуры pandas
иDataFrame
заключается в том, насколько легко она упрощает анализ данных, особенно в сочетании с библиотекой matplotlib
. matplotlib
- это совершенно новая тема, поэтому вот простой пример, чтобы подогреть аппетит.
Попробуй
import pandas as pd import matplotlib.pyplot as plt titanic_df = pd.read_csv("titanic_names.csv") # Draw a histogram of passenger ages age_hist = titanic_df['Age'].hist() age_hist.set(xlabel='Passenger Age', ylabel='Count') plt.show()
Счастливого Python !!!
Ресурсы
- Оригинальный Источник данных Титаника
- Удобная шпаргалка по пандам (автор: pandas.pydata.org)
- Официальная документация Pandas по DataFrames
- Документация Pandas по построению и визуализации данных
- Блокнот Jupyter со всеми упражнениями из этого Руководства