Python Учебное пособие по Pandas: DataFrame, диапазон дат и его использование.
⚡ Умное резюме
Pandas — это библиотека с открытым исходным кодом. Python Библиотека для обработки табличных данных. Она предоставляет структуры Series и DataFrame, диапазоны дат, вспомогательные функции проверки, а также операции среза, удаления, объединения, сортировки и переименования, продемонстрированные в этом пошаговом руководстве.
Что такое Pandas в Python?
Панды Это библиотека с открытым исходным кодом, которая позволяет выполнять обработку и анализ данных. PythonОн охватывает как числовые таблицы, так и временные ряды. Он предоставляет простой способ создания, обработки и анализа данных и построен на основе... NumPyТаким образом, для работы Pandas необходимо наличие библиотеки NumPy.
Зачем использовать Панды?
Ученые, работающие с данными, используют Pandas в Python для получения следующих преимуществ:
- Легко обрабатывает недостающие данные
- В нем используется класс Series для одномерных данных и DataFrame для многомерных данных.
- Он обеспечивает эффективный способ разделения данных
- Он обеспечивает гибкий способ объединения, конкатенации или изменения формы данных.
- Он включает в себя мощный набор инструментов для работы с временными рядами.
Вкратце, Pandas предоставляет мощные и простые в использовании структуры данных, а также средства для быстрой работы с ними, поэтому он является основой большинства библиотек. Python анализ данных Работа.
Как установить Pandas
Pandas поставляется вместе с Anaconda и большинством управляемых сервисов Notebook, поэтому обычно он уже установлен. Если импорт не удается, одна из приведенных ниже команд добавит его. Встроенная среда Как установить ТензорФлоу Также содержит Pandas.
- пип:
pip install pandas - Анаконда:
conda install -c anaconda pandas - Внутри Jupyter ноутбук Мобильный телефон:
import sys !conda install --yes --prefix {sys.prefix} pandas
Что такое DataFrame Pandas?
Pandas DataFrame — это двумерная структура данных с метками, столбцы которой могут содержать данные разных типов. Это стандартный способ хранения данных в табличном формате: строки содержат наблюдения, а столбцы — названия информации. Например, цена может быть названием столбца, а 2, 3, 4 могут быть значениями цен.
Фреймы данных хорошо известны статистикам и другим специалистам по работе с данными. На рисунке ниже показана такая форма — помеченный индекс строки сбоку и именованные столбцы сверху.
Что такое серия?
Структура данных Series — это одномерная структура. Она может содержать данные любого типа, например, целое число, число с плавающей запятой или строку, и полезна, когда необходимо выполнить вычисления или вернуть одномерный массив. По определению, структура Series не может иметь несколько столбцов; в этом случае используйте структуру DataFrame.
Конструктор Pandas Series принимает следующие параметры:
- Данные: может быть списком, словарем или скалярным значением.
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
Вы можете добавить индекс с помощью index. Он присваивает имена строкам, и его длина должна равняться длине столбца.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
Ниже вы создаете объект Pandas Series с пропущенным значением в третьей строке. Пропущенные значения в Python показаны как NaN и np.nan NumPy создает его искусственно.
pd.Series([1,2,np.nan])
Результат
0 1.0 1 2.0 2 NaN dtype: float64
Создать фрейм данных Pandas
Вы можете преобразовать массив NumPy в DataFrame с помощью pd.DataFrame()Также возможен и обратный вариант: чтобы преобразовать DataFrame обратно в массив, используйте np.array() или df.to_numpy(), что и рекомендуется в текущей документации Pandas.
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
Словарь отлично подходит в качестве входных данных для pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| Возраст | Имя | |
|---|---|---|
| 0 | 30 | John |
| 1 | 40 | Smith |
Данные о диапазоне панд
Библиотека Pandas предоставляет удобный API для создания диапазона дат, который становится индексом временного ряда. Вызов имеет следующий вид:
pd.date_range(start, periods, freq):
- Первый параметр — дата начала.
- Второй параметр — количество периодов (необязательно, если указана дата окончания).
- Последний параметр — частота: день
D, месяцMи годY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
Результат
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
Результат
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
Примечание к версии: псевдоним месяца M Приведенный выше код устарел начиная с Pandas 2.2 и удален в Pandas 3.0. В текущих версиях он проходит проверку. freq='ME' на конец месяца; результирующий индекс идентичен.
Проверка данных
Проверить начало или конец набора данных можно с помощью head() or tail() Вызов осуществляется на объекте DataFrame, как показано в приведенном ниже примере с Pandas.
Шаг 1) Создайте случайную последовательность с помощью NumPy. Последовательность будет иметь 4 столбца и 6 строк.
random = np.random.randn(6,4)
Шаг 2) Затем вы создаёте DataFrame с помощью библиотеки Pandas.
Используйте dates_m в качестве индекса, поэтому каждой строке присваивается имя, соответствующее дате, а 4 столбца именуются следующим образом: columns аргумент.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
Так как np.random.randn() При запуске без начального значения генератора случайных чисел ваши результаты будут отличаться от приведенных здесь. Звонок np.random.seed(0) Во-первых, если вы хотите воспроизвести фиксированный набор.
Шаг 3) Используя функцию head
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
Шаг 4) Используя функцию tail
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
Шаг 5) Отличный способ получить представление о данных — это describe()В нем отображаются количество, среднее значение, стандартное отклонение, минимальное и максимальное значения, а также процентили набора данных.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| считать | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| значить | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| станд | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| мин | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| Макс | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
Срез данных
Функция среза извлекает подмножество строк или столбцов из DataFrame. Вы можете использовать имя столбца для примера.tracв одном столбце, как показано в приведенном ниже примере с Pandas.
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
Для выбора нескольких столбцов необходима двойная скобка. [[..,..]]Первая пара указывает, какие столбцы нужно выбрать; вторая пара указывает, какие столбцы следует вернуть.
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Строки можно отфильтровать с помощью двоеточия. Приведённый ниже код возвращает первые три строки.
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
loc Метод доступа выбирает столбцы по имени. Как обычно, значение до запятой обозначает строки, а значение после нее — столбцы; для выбора более чем одного столбца необходимы скобки.
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Существует еще один способ выбора нескольких строк и столбцов. iloc[] Вместо имен столбцов используются целочисленные позиции, поэтому приведенный ниже код возвращает тот же DataFrame, что и выше.
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Оставить столбец
Вы можете удалять столбцы с помощью df.drop(), передавая имена в columns аргумент.
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
конкатенация
Вы можете объединить два DataFrame с помощью pd.concat()Сначала создайте два фрейма.
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
Затем объедините их.
df_concat = pd.concat([df1,df2]) df_concat
| Возраст | имя | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
| 3 | 26 | Адам |
| 4 | 11 | Smith |
Удалить дубликаты
Когда набор данных содержит повторяющуюся информацию, drop_duplicates() Это простой способ исключить повторяющиеся строки. df_concat содержит дублирующееся наблюдение: Smith встречается дважды в name колонка.
df_concat.drop_duplicates('name')
| Возраст | имя | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
| 3 | 26 | Адам |
Сортировка значений
Вы можете отсортировать рамку с помощью sort_values(), Обратите внимание, что Age Здесь данные были созданы в текстовом формате, поэтому строки сортируются в строковом порядке.
df_concat.sort_values('Age')
| Возраст | имя | |
|---|---|---|
| 4 | 11 | Smith |
| 0 | 25 | John |
| 3 | 26 | Адам |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
Переименовать столбцы
Используйте rename() Чтобы переименовать столбец в Pandas. В каждой паре первое значение — это текущее имя столбца, а второе — новое.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Возраст_чел. | Фамилия | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Smith |
| 2 | 50 | Paul |
| 3 | 26 | Адам |
| 4 | 11 | Smith |
Краткий справочник по методам Pandas
В этой таблице каждому распространенному заданию соответствует метод Pandas, который его выполняет.
| Сложность задачи | Способ доставки |
|---|---|
| импортировать данные | read_csv |
| создать серию | Серия |
| Создать фрейм данных | DataFrame |
| Создать диапазон дат | диапазон дат |
| вернуть голову | |
| возвратный хвост | хвост |
| Описывать | описывать |
| фрагмент, используя имя | имя_данных['имя_столбца'] |
| Разрезать по строкам | имя_данных[0:5] |

