Как управлять датой и временем в python?

Использование официальной библиотеки для импорта данных из Google BiqQuery

Как видно, по простоте синтаксиса, официальная библиотека мало чем отличается от использования pandas-gbq. При этом я заметил, что некоторые функции (например, date_trunc) не работают через pandas-gbq. Так что я предпочитаю использовать официальное Python SDK для Google BigQuery.

Чтобы импортировать данные из датафрейма в BigQuery, нужно установить pyarrow. Эта библиотека обеспечит унификацию данных в памяти, чтобы dataframe соответствовал структуре данных, нужных для загрузки в BigQuery.

Проверим, что наш датафрейм загрузился в BigQuery:

Прелесть использования нативного SDK вместо pandas_gbq в том, что можно управлять сущностями в BigQuery, например, создавать датасеты, редактировать таблицы (схемы, описания), создавать новые view и т. д. В общем, если pandas_gbq — это скорее про чтение и запись dataframe, то нативное SDK позволяет управлять всей внутренней кухней

Ниже привожу простой пример, как можно изменить описание таблицы:

Также с помощью нативного Python-SDK можно вывести все поля из схемы таблицы, отобразить количество строк в таблице

Если таблица уже создана, то в результате новой передачи датафрейма в существующую таблицу будут добавлены строки

Что такое файл CSV? ↑

Структура файла CSV определяется его именем. Обычно, в файлах CSV для разделения каждого конкретного значения данных используется запятая. Вот как выглядит эта структура:

column 1 name,column 2 name,column 3 name
first row data 1,first row data 2,first row data 3
second row data 1,second row data 2,second row data 3
...

Обратите внимание, как каждая часть данных разделена запятой. Обычно первая строка идентифицирует каждую часть данных — другими словами, имя столбца данных

Каждая последующая строка после этого является фактическими данными и ограничена только ограничениями размера файла.

Обычно символ-разделитель называется разделителем, и используется не только запятая. Другие популярные разделители включают символы табуляции (), двоеточия () и точки с запятой (). Для правильного анализа CSV-файла нам необходимо знать, какой разделитель используется.

Откуда берутся файлы CSV?   

Файлы CSV обычно создаются программами, которые обрабатывают большие объемы данных. Это удобный способ экспортировать данные из электронных таблиц и баз данных, а также импортировать или использовать их в других программах. Например, вы можете экспортировать результаты программы интеллектуального анализа данных в файл CSV, а затем импортировать их в электронную таблицу для анализа данных, создавать графики для презентации или готовить отчет к публикации.

С файлами CSV очень легко работать программно. Любой язык, поддерживающий ввод текстовых файлов и манипуляции со строками (например, Python), может напрямую работать с файлами CSV.

Сортировка по значениям

Метод sort_values() используется для сортировки DataFrame по значениям.

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

Пример:

import pandas
import numpy


input = {'Name':pandas.Series(),
   'Marks':pandas.Series(),
   'Roll_num':pandas.Series()
}


data_frame = pandas.DataFrame(input, index=)
print("Unsorted data frame:\n")
print(data_frame)
sorted_df=data_frame.sort_values(by='Marks')
print("Sorted data frame:\n")
print(sorted_df)

Выход:

Unsorted data frame:

    Name  Marks  Roll_num
0   John     44         1
2   Caret    75         3
1   Bran     48         2
4   Sam      99         5
3   Joha     33         4

Sorted data frame:

    Name  Marks  Roll_num
3   Joha     33         4
0   John     44         1
1   Bran     48         2
2   Caret    75         3
4    Sam     99         5

# Стандарт UTC

Есть несколько стандартов измерения и записи времени. Раньше в основном придерживались (англ. «Greenwich Mean Time», среднее время по гринвичскому меридиану). Позже прежний всемирный формат был отменен и приняли новый, определяемый атомными часами. Это — «coordinated universal time» — всемирное координированное время.

У каждой переменной типа данных можно вызвать метод (англ. now «сейчас»). Он вернёт текущий момент времени по с эталонной точностью до микросекунд.

12345

Более того, метод настолько хитрый, что для его вызова необязательно явно создавать объект типа . Можно просто написать:

1

Для получения времени другого часового пояса, есть тип (от англ. delta, «промежуток»), в котором можно сохранить определенный промежуток времени. Этот тип тоже живёт в библиотеке dt. А объект такого типа создаётся функцией :

1234

И прибавляем его к значению времени по UTC:

1234

В аргументах функции среди прочего можно указывать (дни), (часы), (минуты), (секунды), (микросекунды).

Пример: Победитель Гран-при Австралии чемпионата мира Формулы-1 2019 года, Вале Боттас проехал свой самый быстрый круг за 1 минуту 25 секунд и 273250 микросекунд. Второй результат показал Льюис Хэмилтон с разницей в 208860 микросекунд. Вычислим время самого быстрого круга Хэмилтона.

12345

Работа с часовыми поясами

При работе с часовыми поясами обработка даты и времени становится более сложной. Все вышеупомянутые примеры, которые мы обсуждали, являются наивными объектами datetime, то есть эти объекты не содержат данных, связанных с часовым поясом. У объекта datetime есть одна переменная, которая содержит информацию о часовом поясе, tzinfo.

import datetime as dt

dtime = dt.datetime.now()

print(dtime)
print(dtime.tzinfo)

Этот код напечатает:

$ python3 datetime-tzinfo-1.py
2018-06-29 22:16:36.132767
None

Вывод tzinfo – None, поскольку это объект datetime. Для преобразования часового пояса для Python доступна библиотека pytz. Теперь давайте воспользуемся библиотекой, чтобы преобразовать указанную выше метку времени в UTC.

import datetime as dt
import pytz

dtime = dt.datetime.now(pytz.utc)

print(dtime)
print(dtime.tzinfo)

Вывод:

$ python3 datetime-tzinfo-2.py
2018-06-29 17:08:00.586525+00:00
UTC

+00: 00 – разница между отображаемым временем и временем UTC. В этом примере значение tzinfo также совпадает с UTC, отсюда смещение 00:00. В этом случае объект datetime является объектом с учетом часового пояса.

Точно так же мы можем преобразовать строки даты и времени в любой другой часовой пояс. Например, мы можем преобразовать строку «2018-06-29 17: 08: 00.586525 + 00: 00» в часовой пояс «America / New_York», как показано ниже:

import datetime as dt
import pytz

date_time_str = '2018-06-29 17:08:00'
date_time_obj = dt.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S')

timezone = pytz.timezone('America/New_York')
timezone_date_time_obj = timezone.localize(date_time_obj)

print(timezone_date_time_obj)
print(timezone_date_time_obj.tzinfo)

Выход:

$ python3 datetime-tzinfo-3.py
2018-06-29 17:08:00-04:00
America/New_York

Сначала мы преобразовали строку в объект datetime, date_time_obj. Затем мы преобразовали его в объект datetime с включенным часовым поясом, timezone_date_time_obj. Поскольку мы установили часовой пояс, как «America и New_York», время вывода показывает, что он на 4 часа отстает от времени UTC. Вы можете проверить эту страницу Википедии, чтобы найти полный список доступных часовых поясов.

Операции с текстовыми данными в Pandas

Строковые функции Python можно применять к DataFrame.

Ниже приводится список наиболее часто используемых строковых функций в DataFrame:

Функция
lower(): преобразует строку в DataFrame в нижний регистр.
upper(): преобразует строку в DataFrame в верхний регистр.
len(): возвращает длину строки.
strip(): обрезает пробелы с обеих сторон ввода в DataFrame.
split (»): разбивает строку с шаблоном ввода.
contains (pattern): возвращает истину, если переданная подстрока присутствует во входном элементе DataFrame.
replace (x, y): меняет значения x и y.
startwith (шаблон): возвращает истину, если входной элемент начинается с предоставленного аргумента.
endwith (pattern): возвращает истину, если входной элемент заканчивается предоставленным аргументом.
swapcase: меняет верхний регистр на нижний и наоборот.
islower(): возвращает логическое значение и проверяет, все ли символы ввода в нижнем регистре или нет.
isupper(): возвращает логическое значение и проверяет, все ли символы ввода находятся в верхнем регистре или нет.

Пример:

import pandas
import numpy


input = pandas.Series()
print("Converting the DataFrame to lower case....\n")
print(input.str.lower())
print("Converting the DataFrame to Upper Case.....\n")
print(input.str.upper())
print("Displaying the length of data element in each row.....\n")
print(input.str.len())
print("Replacing 'a' with '@'.....\n")
print(input.str.replace('a','@'))

Выход:

Converting the DataFrame to lower case....

0     john
1     bran
2     caret
3     joha
4     sam
dtype: object

Converting the DataFrame to Upper Case.....

0     JOHN
1     BRAN
2     CARET
3     JOHA
4     SAM
dtype: object

Displaying the length of data element in each row.....

0    4
1    4
2    5
3    4
4    3
dtype: int64

Replacing 'a' with '@'.....

0     John
1     Br@n
2     C@ret
3     Joh@
4     S@m
dtype: object

Исследуем данные: методы и атрибуты

Кроме методов, у датафреймов есть неотъемлемые свойства, которые называются атрибутами. В отличие от методов, они вызываются без скобок в конце.

Как видим, можно посмотреть каждую колонку отдельно. И уже к этой колонке применить метод:

Вывод будет таким:

Метод .describe(), применённый к колонке salary таблицы trips_df, показал нам следующее.

count — количество строк: 1 000.

mean — средний доход составляет 111 935 рублей. Неплохо!

std — под этим сокращением скрыто так называемое стандартное (среднеквадратичное) отклонение, которое показывает величину разброса значений. В нашем случае оно довольно большое, почти 55 000 рублей. Это означает, что доходы у людей в таблице очень разные.

min — минимальное значение доходов из таблицы. Ноль значит, что есть как минимум один человек с нулевым доходом.

В математической статистике процентиль, или перцентиль (ударение на последний слог), — это, если по-простому, пара чисел. Первое из них — процентная доля тех значений рассматриваемой величины, которые не превышают второго числа. Например, фраза «двадцать пятый процентиль доходов туристов составляет 68 000 рублей в месяц» означает, что у 25% наших туристов доход не превышает этой суммы. А у остальных, что очевидно, доход больше.

25% — вот он, тот самый двадцать пятый процентиль. Часто его ещё называют «нижний квартиль».

50% — пятидесятый процентиль, или медиана. В примере она равна 99000, и это значит, что одна половина людей из таблицы получает меньше этой суммы, а другая — больше.

75% — семьдесят пятый процентиль, который также часто называют «верхний квартиль». Означает, что у 75% людей доход меньше 161 000 рублей, а у оставшихся 25% — больше.

max — здесь всё понятно. В нашей таблице есть как минимум один человек с доходом 250 000 рублей в месяц — наверняка это какой-нибудь дата-сайентист: -).

Name: salary, dtype: float64 — служебная информация: название колонки и тип данных в ней.

Использование pandas-gbq для импорта данных из Google BiqQuery

Я решил рассмотреть основы работы с Google BigQuery с помощью Python на примере публичных датасетов. В качестве интересного примера возьмем датасет с данными о вопросах на сервисе Stackoverflow.

Дальше немного поиграем с обработкой данных. Выделим из даты месяц и год.

Cгруппируем данные по годам и месяцам и запишем полученные данные в датафрейм stats.

Посчитаем суммарное количество вопросов в год, а также среднее количество запросов в месяц для каждого года, начиная с января 2013 и по август 2018 (последний полный месяц, который был в датасете на момент написания статьи). Запишем полученные данные в новый датафрейм year_stats

Так как 2018 год в наших данных неполный, то мы можем посчитать оценочное количество вопросов, которое ожидается в 2018 году.

На основе данных от StackOverflow можно сказать, что популярность pandas из года в год растет хорошими темпами :)

Формат datetime

Представление даты и времени может отличатся в разных странах, организациях и т. д. В США, например, чаще всего используется формат «мм/дд/гггг», тогда как в Великобритании более распространен формат «дд/мм/гггг».

В Python для работы с форматами есть методы и .

Python strftime() — преобразование объекта datetime в строку

Метод определен в классах , и . Он создает форматированную строку из заданного объекта , или .

Пример 16: форматирование даты с использованием метода strftime().

from datetime import datetime

now = datetime.now()

t = now.strftime("%H:%M:%S")
print("time:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("s2:", s2)

Когда вы запустите программу, результат будет примерно таким:

Здесь , , , и т. д. — коды для определения формата. Метод принимает один или несколько кодов и возвращает отформатированную строку на его основе.

В приведенной выше программе переменные , и являются строками.

Основные коды для определения формата:

  • — год
  • — месяц
  • — день
  • — час
  • — минута
  • — секунда

Python strptime()- преобразование строки в  объект datetime

Метод создает объект datetime из заданной строки (представляющей дату и время).

Пример 17: метод strptime().

from datetime import datetime

date_string = "21 June, 2018"
print("date_string =", date_string)

date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)

Когда вы запустите программу, вывод будет следующим:

Метод принимает два аргумента:

  1. строка, представляющая дату и время.
  2. формат, определяющий, каким образом части даты и времени расположены в переданной строке.

Кстати, коды , и используются для обозначения дня, месяца (название месяца в полном виде) и года соответственно.

Как создать простой aware-объект datetime, учитывающий часовой пояс

import datetime
dt_now = datetime.datetime.utcnow()
print(dt_now)

Один из недостатков библиотеки datetime Python — отсутствие поддержки часовых поясов. В случае, когда нужно учитывать часовой пояс, используется другая библиотека – . В первой строке кода эту библиотеку также нужно импортировать. Предположим, что нам необходимо задать время в столице Кении — Найроби:

import pytz
import datetime
tz_nairobi = pytz.timezone("Africa/Nairobi")
dt_nairobi =datetime.datetime.now(tz_nairobi)
print(dt_nairobi)

Консоль выведет:

А вот так высчитывается время в Праге:

import pytz
import datetime
tz_praha = pytz.timezone("Europe/Prague")
dt_praha = datetime.datetime.now(tz_praha)
print(dt_praha)

Результат:

Структура данных DataFrame

DataFrame – это двухмерные структуры помеченных данных, столбцы которых могут содержать разные типы данных.

Данные DataFrame похожи на электронную таблицу или таблицу SQL. В целом DataFrame – самый распространённый объект при работе с pandas.

Чтобы понять, как работает DataFrame, создайте две структуры Series и передайте их DataFrame. Первая структура Series – это avg_ocean_depth (из вышеприведённого примера), а вторая структура будет называться max_ocean_depth и содержать данные о максимальной глубине каждого океана в метрах. Откройте файл ocean.py и добавьте в него:

Структуры Series готовы. Теперь добавьте в конец файла DataFrame (под max_ocean_depth). В данном примере обе структуры Series имеют одинаковые метки индексов; если бы структуры Series имели разные метки индексов, пропущенные значения были бы помечены как NaN.

В массив можно добавить метки столбцов, которые объявлены как ключи переменных Series. Чтобы увидеть DataFrame, отобразите данные:

В результате на экране появится два столбца с соответствующими заголовками, числовые данные справа и метки из словаря (ключи) слева.

Сортировка данных в DataFrame

Вы можете сортировать данные в DataFrame с помощью функции DataFrame.sort_values(by=…).

Для примера используем логический параметр ascending, который может быть истинным или ложным (True или False). Параметр ascending можно передать функции, а descending – нельзя.

Теперь в выводе значения расположены в порядке возрастания.

DataFrame и статистический анализ

Пакет pandas позволяет собирать общие статистические данные с помощью функции DataFrame.describe().

Без дополнительных параметров функция DataFrame.describe() предоставит следующую информацию для числовых типов данных:

Вывод

Что это значит?

count Подсчёт частоты того или иного события (сколько раз произошло событие?).
mean Среднее значение.
std Стандартное отклонение (числовое значение, которое отображает изменение пределов данных).
min Наименьшее число в наборе данных.
25% 25-й процентиль.
50% 50-й процентиль.
75% 75-й процентиль.
max Максимальное число в наборе данных.

Запросите статистику структуры ocean_depths с помощью функции describe().

На экране появятся данные:

Обработка пропущенных значений

Пропущенные значения часто встречаются при работе с данными. Пакет pandas предоставляет множество способов обработки пропущенных данных (данных null), то есть тех данных, которые были пропущены по той или иной причине. В pandas такие данные называются данными NA и отображаются как NaN.

Рассмотрим некоторые функции работы с пропущенными данными (например, сброс и заполнение). Для сброса используется функция DataFrame.dropna(), а для заполнения – DataFrame.fillna().

Создайте файл user_data.py, добавьте в него данные с пропущенными значениями и превратите в DataFrame:

Теперь отобразите данные:

В них присутствует несколько пропущенных значений.

Попробуйте сбросить пропущенные значения. Добавьте в файл опцию:

Поскольку в файле всего одна строка не содержит пропущенных значений, на экране появится довольно маленький набор данных:

Пропущенные значения можно заполнить любыми значениями, например, вставить 0. Это делается с помощью DataFrame.fillna(0).

Удалите или закомментируйте последнюю строку в файле и добавьте в него такую строку:

Снова запустите программу. На экране появится:

Теперь на экране отображаются все строки, а пропущенные значения NaN заменены нулем.

Arrow

Arrow – еще одна библиотека для работы с datetime в Python. И, как и раньше с Maya, он также автоматически определяет формат даты и времени. После интерпретации он возвращает объект даты и времени в Python из объекта стрелки.

Давайте попробуем это с той же примерной строкой, которую мы использовали для Maya:

import arrow

dt = arrow.get('2018-04-29T17:45:25Z')
print(dt.date())
print(dt.time())
print(dt.tzinfo)

Вывод:

$ python3 arrow-1.py
2018-04-29
17:45:25
tzutc()

А вот как можно использовать стрелку для преобразования часовых поясов с помощью метода to:

import arrow

dt = arrow.get('2018-04-29T17:45:25Z').to('America/New_York')
print(dt)
print(dt.date())
print(dt.time())

Вывод:

$ python3 arrow-2.py
2018-04-29T13:45:25-04:00
2018-04-29
13:45:25

Как видите, строка даты и времени преобразована в регион «Америка и Нью-Йорк».

Теперь давайте снова воспользуемся тем же набором строк, который мы использовали выше:

import arrow

date_array = [
    '2018-06-29 08:15:27.243860',
    #'Jun 28 2018 7:40AM',
    #'Jun 28 2018 at 7:40AM',
    #'September 18, 2017, 22:19:55',
    #'Sun, 05/12/1999, 12:30PM',
    #'Mon, 21 March, 2015',
    '2018-03-12T10:12:45Z',
    '2018-06-29 17:08:00.586525+00:00',
    '2018-06-29 17:08:00.586525+05:00',
    #'Tuesday , 6th September, 2017 at 4:30pm'
]

for date in date_array:
    dt = arrow.get(date)
    print('Parsing: ' + date)
    print(dt)
    print(dt.date())
    print(dt.time())
    print(dt.tzinfo)

Этот код завершится ошибкой для закомментированных строк даты и времени, что составляет более половины наших примеров. Результатом для других строк будет:

$ python3 arrow-3.py
Parsing: 2018-06-29 08:15:27.243860
2018-06-29T08:15:27.243860+00:00
2018-06-29
08:15:27.243860
tzutc()

Parsing: 2018-03-12T10:12:45Z
2018-03-12T10:12:45+00:00
2018-03-12
10:12:45
tzutc()

Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29T17:08:00.586525+00:00
2018-06-29
17:08:00.586525
tzoffset(None, 0)

Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29T17:08:00.586525+05:00
2018-06-29
17:08:00.586525
tzoffset(None, 18000)

Чтобы правильно проанализировать строки даты и времени, вам необходимо передать соответствующие токены формата, чтобы дать библиотеке подсказки относительно того, как их анализировать. Например, «MMM» для названия месяцев, например «Jan, Feb, Mar» и т.д. вы можете проверить это руководство для всех доступных токенов.

Модуль datetime

В базовом функционале Питона нет отдельного типа данных, отвечающего за дату и время. Необходимо импортировать модуль, который называется datetime.

Первая особенность, про которую стоит сказать, datetime — это не только название модуля, но и название одного из классов внутри этого модуля. Помимо класса datetime, нас будет интересовать ещё один класс — timedelta.

Перейдем к практике.

Откроем ноутбук к этому занятию⧉

Импорт модуля и класса datetime

Самый простой способ — импортировать весь модуль datetime.

1
2

# импортируем весь модуль

importdatetime

Далее предположим, что мы хотим воспользоваться функцией now(), которая находится внутри класса datetime. Функция now() выводит текущие дату и время.

1
2

# чтобы получить доступ к функции now(), сначала обратимся к модулю, потом к классу

print(datetime.datetime.now())

1 2021-11-18 09:33:28.140594

Как вы видите, это не очень удобно. Можно импортировать только класс datetime и обращаться непосредственно к нему.

1
2

fromdatetimeimportdatetime

print(datetime.now())

1 2021-11-18093330.586757

Объект datetime и функция now()

Теперь поговорим подробнее про то, что выводит функция now().

1
2
3

# поместим созданный с помощью функции now() объект datetime в переменную cur_dt

cur_dt=datetime.now()

print(cur_dt)

1 2021-11-18 09:33:32.412999

На выходе мы получаем текущие дату и время по UTC⧉, потому что серверы Google Colab настроены именно на это время (московское время, например, отличается на +3 часа). Сам вывод состоит из следующих компонентов.

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

1
2

# с помощью соответствующих атрибутов выведем каждый из компонентов объекта

print(cur_dt.year,cur_dt.month,cur_dt.day,cur_dt.hour,cur_dt.minute,cur_dt.second,cur_dt.microsecond)

1 2021 11 18 9 33 32 412999

Мы также можем посмотреть на день недели, причем в двух форматах. Метод .weekday() считает, что неделя начинается с нуля, метод .isoweekday(), что с единицы.

Так как 18 ноября 2021 года — это четверг, то применив эти методы, мы должны получить цифры три и четыре соответственно.

1 print(cur_dt.weekday(),cur_dt.isoweekday())
1 3 4

Разумеется, когда вы будете самостоятельно исполнять код в ноутбуке, будут выведены текущие дата и время сервера Google.

Объект datetime, полученный из функции now(), не содержит данных о часовом поясе.

1
2

# посмотрим на часовой пояс с помощью атрибута tzinfo

print(cur_dt.tzinfo)

1 None

Для того чтобы добавить такую информацию и вывести, например, другой часовой пояс, нам нужно воспользоваться модулем pytz.

1
2
3
4
5

importpytz

 
# выведем текущее время в Москве

dt_moscow=datetime.now(pytz.timezone(‘Europe/Moscow’))

print(dt_moscow)

1 2021-11-18 12:33:33.682674+03:00

Посмотрим, не появился ли часовой пояс.

1 print(dt_moscow.tzinfo)
1 Europe/Moscow

Timestamp

До сих пор мы работали с привычным для нас делением на годы, месяцы, дни, часы, минуты и секунды. При этом компьютеры используют так называемое время Unix, которое отсчитывается в секундах c первого января 1970 года. Для отображения даты и времени в таком формате в Питоне есть объект timestamp (по-английски — «временная отметка»).

1
2

# получим timestamp текущего времени с помощью метода .timestamp()

timestamp=datetime.now().timestamp()

Посмотрим, сколько секунд и микросекунд прошло с 01.01.1970 и до момента исполнения кода.

1 print(timestamp)
1 1637233979.128056

Не составляет труда вернуть timestamp обратно в привычный формат.

1
2

# для этого воспользуемся методом .fromtimestamp()

print(datetime.fromtimestamp(timestamp))

1 2021-11-18 11:12:59.128056

Создание объекта datetime вручную

Дату и время не обязательно получать из функции now(). Мы вполне можем передать объекту datetime наши собственные параметры, например, день рождения Питона.

1
2
3

# передадим объекту datetime 20 февраля 1991 года

hb=datetime(1991,2,20)

print(hb)

1 1991-02-20 00:00:00

Обратите внимание, мы ввели только год, месяц и день. Это обязательные параметры

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

Из этого объекта мы также можем извлечь компоненты (год, месяц, число и т.д.) и создать timestamp.

1
2

# извлечем год с помощью атрибута year

print(hb.year)

1 1991

1
2

# и создадим timestamp

print(datetime.timestamp(hb))

1 667008000.0

Что нужно?

Изначально надо иметь версию Python хотя бы 3,7. Можно более новую. Помимо этого, должны быть установлены numpy, Pandas.

Далее надо подключиться к серверу. Если его нет, то можно создать локальный сервер, после чего запустить Jupyter. После этого открыть браузер, который подходит вам больше всего и открыть Jupyter Notebook. Далее создается ноутбук с названием pandas_tutorial_1.

Далее надо импортировать numpy, pandas в Jupyter Notebook с использованием двух строчек кода. 

import numpy as np

import pandas as pd

Теперь все настроено. Поэтому переходим к руководству по этой библиотеке. Начнем с вопроса, как правильно осуществлять открытие файлов с информацией с помощью этой библиотеки.

Сбор данных

Наука о данных включает в себя обработку данных, чтобы данные могли хорошо работать с алгоритмами данных. Data Wrangling – это процесс обработки данных, такой как слияние, группировка и конкатенация.

Библиотека Pandas предоставляет полезные функции, такие как merge(), groupby() и concat() для поддержки задач Data Wrangling.

import pandas as pd

d = {  
    'Employee_id': ,
    'Employee_name': 
}
df1 = pd.DataFrame(d, columns=)  
print(df1)

import pandas as pd

data = {  
    'Employee_id': ,
    'Employee_name': 
}
df2 = pd.DataFrame(data, columns=)  
print(df2)

а. merge()

print(pd.merge(df1, df2, on='Employee_id'))

Мы видим, что функция merge() возвращает строки из обоих DataFrames, имеющих то же значение столбца, которое использовалось при слиянии.

b. Группировка

import pandas as pd
import numpy as np

data = {
    'Employee_id': ,
    'Employee_name': 
}
df2 = pd.DataFrame(data)

group = df2.groupby('Employee_name')
print(group.get_group('Meera'))

Поле «Employee_name» со значением «Meera» сгруппировано по столбцу «Employee_name». Пример вывода приведен ниже:

Подведем итог

Сегодня мы посмотрели на возможности Питона по работе с датой и временем. В частности, узнали про классы datetime и timedelta модуля datetime и научились работать с объектами этих классов:

  • Мы рассмотрели структуру объекта datetime
  • Узнали про функцию now()
  • Научились извлекать timestamp и вручную создавать объект datetime
  • Посмотрели, как преобразовывать строку в объект datetime и наоборот
  • Изучили возможности сравнения дат, вычисления промежутка между датами и выполнили несложную арифметику дат с помощью объекта timedelta
  • Наконец, мы познакомились с конструкцией try/except и оператором pass и применили их к обработке различных форматов дат

Вопросы для закрепления

С какими классами модуля datetime мы познакомились на этом занятии?

Посмотреть правильный ответ

Ответ: классом datetime и классом timedelta

Чему соответствует формат ‘%c’?

Посмотреть правильный ответ

Ответ: формат ‘%c’ выводит полную дату и время, например: Sun Nov 21 10:38:12 2021

Как еще в библиотеке Pandas мы можем превратить столбец в индекс и затем преобразовать в объект datetime? Подсказка: обратитесь к лекции по временным рядам.

Посмотреть правильный ответ

Ответ: мы можем последовательно применить .set_index() и pd.to_datetime()

В ноутбуке к лекции приведены ⧉.

На следующем занятии мы поговорим про функции в Питоне.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: