English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Конкатенация Pandas

Пример операции подключения Pandas

Pandas предоставляет различные функции, которые позволяют легко комбинировать Series, DataFrame и Panel объекты.

 pd.concat(objs, axis=0, join='outer', join_axes=None,
 ignore_index=False)

objs − Это последовательность Series или карта, DataFrame или Panel объект. axis − {0, 1, ...}, по умолчанию 0. Это ось, которую нужно слить. join − {'inner', 'outer'}, по умолчанию 'outer'. Как обрабатывать индексы других осей. Внешний - это объединение, внутренний - это перекрестное слияние. ignore_index − Булево значение, по умолчанию False. Если True, не использовать значения индексов на оси слияния. Осевая линия будет помечена как 0, ..., n-1. join_axes − Это список индексных объектов. Используется для других специфических индексов по осям (n-1), а не для выполнения логики внутреннего/внешнего установления.

Объекты для подключения

Функция CONCAT выполняет все задачи по слиянию по осям. Давайте создадим различные объекты и свяжем их.

 import pandas as pd
 one = pd.DataFrame({
    'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'subject_id':['sub1','sub2','sub4','sub6','sub5'],
    'Marks_scored':[98,90,87,69,78]},
    index=[1,2,3,4,5])
 two = pd.DataFrame({
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub2','sub4','sub3','sub6','sub5'],
    'Marks_scored':[89,80,79,97,88]},
    index=[1,2,3,4,5])
 print(pd.concat([one,two])))

Результат выполнения будет следующим:

    Marks_scored     Name   subject_id
1             98     Алексей         под1
2             90      Эми         под2
3             87    Эллен         под4
4             69    Алис         под6
5             78   Айyoung         под5
1             89    Билли         под2
2             80    Брайан         под4
3             79    Бран         под3
4             97    Брайс         под6
5             88    Бетти         под5

Предположим, что мы хотим связать специфические ключи с каждым фрагментом разрезанного DataFrame. Это можно сделать, используя параметр keys -

 import pandas as pd
 one = pd.DataFrame({
    'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'subject_id':['sub1','sub2','sub4','sub6','sub5'],
    'Marks_scored':[98,90,87,69,78]},
    index=[1,2,3,4,5])
 two = pd.DataFrame({
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub2','sub4','sub3','sub6','sub5'],
    'Marks_scored':[89,80,79,97,88]},
    index=[1,2,3,4,5])
 print(pd.concat([one,two],keys=['x','y']))

Результат выполнения будет следующим:

x  1  98    Алексей   под1
   2  90    Эми     под2
   3  87    Эллен   под4
   4  69    Алис   под6
   5  78    Айyoung  под5
y  1  89    Билли   под2
   2  80    Брайан   под4
   3  79    Бран   под3
   4  97    Брайс   под6
   5  88    Бетти   под5

Индекс результатов повторяется; каждый индекс повторяется.

Если результат объекта должен следовать своему собственному индексу, то установите ignore_index в True.

 import pandas as pd
 one = pd.DataFrame({
    'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'subject_id':['sub1','sub2','sub4','sub6','sub5'],
    'Marks_scored':[98,90,87,69,78]},
    index=[1,2,3,4,5])
 two = pd.DataFrame({
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub2','sub4','sub3','sub6','sub5'],
    'Marks_scored':[89,80,79,97,88]},
    index=[1,2,3,4,5])
 print(pd.concat([one,two],keys=['x','y'],ignore_index=True))

Результат выполнения будет следующим:

    Marks_scored     Name   subject_id
0             98     Алексей          под1
1             90      Amy          sub2
2             87    Allen          sub4
3             69    Alice          sub6
4             78   Ayoung          sub5
5             89    Billy          sub2
6             80    Brian          sub4
7             79     Bran          sub3
8             97    Bryce          sub6
9             88    Betty          sub5

Обратите внимание, что индекс полностью изменяется, и ключи также перезаписываются.

Если необходимо добавить два объекта по оси = 1, то будут добавлены новые столбцы.

 import pandas as pd
 one = pd.DataFrame({
    'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'subject_id':['sub1','sub2','sub4','sub6','sub5'],
    'Marks_scored':[98,90,87,69,78]},
    index=[1,2,3,4,5])
 two = pd.DataFrame({
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub2','sub4','sub3','sub6','sub5'],
    'Marks_scored':[89,80,79,97,88]},
    index=[1,2,3,4,5])
 print(pd.concat([one,two],axis=1))

Результат выполнения будет следующим:

    Marks_scored    Name  subject_id   Marks_scored    Name   subject_id
1           98      Alex      sub1         89         Billy         sub2
2           90       Amy      sub2         80         Brian         sub4
3           87     Allen      sub4         79          Bran         sub3
4           69     Alice      sub6         97         Bryce         sub6
5           78    Ayoung      sub5         88         Betty         sub5

Использование append для串联

Удобный способ использования concat - это метод append на Series и DataFrame. Эти методы существуют раньше, чем concat. Они соединяются по оси = 0, то есть по индексу-

 import pandas as pd
 one = pd.DataFrame({
    'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'subject_id':['sub1','sub2','sub4','sub6','sub5'],
    'Marks_scored':[98,90,87,69,78]},
    index=[1,2,3,4,5])
 two = pd.DataFrame({
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub2','sub4','sub3','sub6','sub5'],
    'Marks_scored':[89,80,79,97,88]},
    index=[1,2,3,4,5])
 print(one.append(two))

Результат выполнения будет следующим:

    Marks_scored    Name  subject_id
1           98     Alex      sub1
2           90     Amy      sub2
3           87     Allen      sub4
4           69     Alice      sub6
5           78    Ayoung      sub5
1           89     Billy      sub2
2           80     Brian      sub4
3           79     Bran      sub3
4           97     Bryce      sub6
5           88     Betty      sub5

дополнительная функция может принимать несколько объектов, а также-

 import pandas as pd
 one = pd.DataFrame({
    'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'subject_id':['sub1','sub2','sub4','sub6','sub5'],
    'Marks_scored':[98,90,87,69,78]},
    index=[1,2,3,4,5])
 two = pd.DataFrame({
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub2','sub4','sub3','sub6','sub5'],
    'Marks_scored':[89,80,79,97,88]},
    index=[1,2,3,4,5])
 print(one.append([two,one,two]))

Результат выполнения будет следующим:

    Marks_scored   Name    subject_id
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5

временные ряды

Pandas предоставляет мощные инструменты для обработки временных рядов, особенно в финансовой области. При обработке временных рядов мы часто сталкиваемся с такими ситуациями:

генерация временного порядка преобразование временных рядов в разные частоты

предоставляет набор относительно компактных и независимых инструментов для выполнения этих задач.

получение текущего времени

datetime.now()предоставление текущей даты и времени.

 import pandas as pd
 print(pd.datetime.now())

Результат выполнения будет следующим:

2017-05-11 06:10:13.393147

создание временной метки

Временные метки - это最基本的 тип временных рядов, в которых значения связаны с точками времени. Для объектов Pandas это означает использование точек времени. Давайте приведем пример-

import pandas as pd
print(pd.Timestamp('2017-03-01'))

Результат выполнения будет следующим:

2017-03-01 00:00:00

также можно преобразовать целое или дробное время. По умолчанию их единица измерения - наносекунды (поскольку это способ хранения временных меток). Но, обычно эра хранится в другой единице, которую можно указать. Приведем пример

import pandas as pd
print(pd.Timestamp(1587687255,unit='s'))

Результат выполнения будет следующим:

 2020-04-24 00:14:15

создание временного диапазона

import pandas as pd
print(pd.date_range("11:00", "13:30", freq="30min").time)

Результат выполнения будет следующим:

 [datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
 datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)

изменение частоты времени

import pandas as pd
print(pd.date_range("11:00", "13:30", freq="H").time)

Результат выполнения будет следующим:

[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]

Преобразование в временной штамп

Чтобы преобразовать сериализованные объекты даты или списки аналогичных объектов (например, строки, эра или смесь), можно использовать функцию to_datetime. При передаче возвращает Series (с таким же индексом), а списки аналогичных списков преобразуются в DatetimeIndex. Вот пример-

import pandas as pd
print(pd.to_datetime(pd.Series(['Jul 31, 2009', '2010-01-10', None])))

Результат выполнения будет следующим:

 0 2009-07-31
 1 2010-01-10
 2 NaT
 dtype: datetime64[ns]

NaT означает не время (эквивалент NaN)

Давайте рассмотрим еще один пример.

import pandas as pd
print(pd.to_datetime(['2005/11/23', '2010.12.31', None]))

Результат выполнения будет следующим:

DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)