Pandas предоставляет различные средства для простого объединения объектов Series, DataFrame и Panel .
pd.concat(objs,axis=0,join='outer',join_axes=None, ignore_index=False)
-
objs — это последовательность или отображение объектов Series, DataFrame или Panel.
-
ось — {0, 1, …}, по умолчанию 0. Это ось для объединения.
-
join — {‘inner’, ‘external’}, по умолчанию ‘external’. Как обрабатывать индексы на других осях. Наружный для объединения и внутренний для пересечения.
-
ignore_index — логическое значение, по умолчанию False. Если True, не используйте значения индекса на оси конкатенации. Результирующая ось будет помечена 0, …, n — 1.
-
join_axes — это список объектов Index. Специальные индексы для использования для других (n-1) осей вместо выполнения внутренней / внешней логики набора.
objs — это последовательность или отображение объектов Series, DataFrame или Panel.
ось — {0, 1, …}, по умолчанию 0. Это ось для объединения.
join — {‘inner’, ‘external’}, по умолчанию ‘external’. Как обрабатывать индексы на других осях. Наружный для объединения и внутренний для пересечения.
ignore_index — логическое значение, по умолчанию False. Если True, не используйте значения индекса на оси конкатенации. Результирующая ось будет помечена 0, …, n — 1.
join_axes — это список объектов Index. Специальные индексы для использования для других (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 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
Предположим, что мы хотим связать определенные ключи с каждым из фрагментов разделенного 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 Alex sub1 2 90 Amy sub2 3 87 Allen sub4 4 69 Alice sub6 5 78 Ayoung sub5 y 1 89 Billy sub2 2 80 Brian sub4 3 79 Bran sub3 4 97 Bryce sub6 5 88 Betty sub5
Индекс результирующего дублируется; каждый индекс повторяется.
Если результирующий объект должен следовать своей собственной индексации, установите для 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 Alex sub1 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
Полезный ярлык для конкатата — это методы добавления экземпляров в 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
Создать метку времени
Данные с метками времени — это самый базовый тип данных временных рядов, который связывает значения с точками во времени. Для объектов панд это означает использование точек во времени. Давайте возьмем пример —
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)]
Преобразование в метки времени
Чтобы преобразовать объект Series или подобный списку объект типа даты, например строки, эпохи или смесь, вы можете использовать функцию 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])
Его вывод выглядит следующим образом —