Настройка импорта: разбор дат

Эффективный импорт данных с pandas

Amany Mahfouz

Instructor

Данные даты и времени

  • Даты и время имеют собственный тип данных и внутреннее представление
  • Значения datetime можно преобразовать в строковое представление
  • Для описания форматирования строк datetime используется общий набор кодов
Эффективный импорт данных с pandas

pandas и Datetimes

  • По умолчанию столбцы datetime загружаются как объекты (строки)
  • Укажите, что столбцы содержат datetime, с помощью аргумента parse_dates (не dtype!)
  • parse_dates принимает:
    • список имён или номеров столбцов для разбора
    • список, содержащий списки столбцов для объединения и разбора
    • словарь, где ключи — новые имена столбцов, а значения — списки столбцов для совместного разбора
Эффективный импорт данных с pandas

pandas и Datetimes

Таблица со столбцами даты и времени в разных форматах

Эффективный импорт данных с pandas

pandas и Datetimes

Таблица с данными даты и времени, выделены столбцы стандартного формата

Эффективный импорт данных с pandas

pandas и Datetimes

Таблица с данными даты и времени, выделены столбец только с датой и столбец только со временем

Эффективный импорт данных с pandas

pandas и Datetimes

Таблица с данными даты и времени, выделен столбец с нестандартным форматом datetime

Эффективный импорт данных с pandas

Разбор дат

# List columns of dates to parse
date_cols = ["Part1StartTime", "Part1EndTime"]

# Load file, parsing standard datetime columns survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols)
Эффективный импорт данных с pandas

Разбор дат

# Check data types of timestamp columns
print(survey_df[["Part1StartTime", 
                 "Part1EndTime", 
                 "Part2StartDate", 
                 "Part2StartTime", 
                 "Part2EndTime"]].dtypes)
Part1StartTime    datetime64[ns]
Part1EndTime      datetime64[ns]
Part2StartDate            object
Part2StartTime            object
Part2EndTime              object
dtype: object
Эффективный импорт данных с pandas

Разбор дат

# List columns of dates to parse
date_cols = ["Part1StartTime", 
             "Part1EndTime",

[["Part2StartDate", "Part2StartTime"]]]
# Load file, parsing standard and split datetime columns survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols)
print(survey_df.head(3))
  Part2StartDate_Part2StartTime   Age       ...    SchoolMajor  StudentDebtOwe
0           2016-03-29 21:24:57  28.0       ...            NaN           20000
1           2016-03-29 21:27:14  22.0       ...            NaN             NaN
2           2016-03-29 21:27:13  19.0       ...            NaN             NaN

[3 rows x 98 columns]
Эффективный импорт данных с pandas

Разбор дат

# List columns of dates to parse
date_cols = {"Part1Start": "Part1StartTime", 
             "Part1End": "Part1EndTime",
             "Part2Start": ["Part2StartDate", 
                             "Part2StartTime"]}


# Load file, parsing standard and split datetime columns survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols) print(survey_df.Part2Start.head(3))
0   2016-03-29 21:24:57
1   2016-03-29 21:27:14
2   2016-03-29 21:27:13
Name: Part2Start, dtype: datetime64[ns]
Эффективный импорт данных с pandas

Нестандартные даты

  • parse_dates не работает с нестандартными форматами datetime
  • Если parse_dates не подходит, используйте pd.to_datetime() после загрузки данных
  • Аргументы to_datetime():
    • DataFrame и столбец для преобразования
    • format: строковое представление формата datetime
Эффективный импорт данных с pandas

Форматирование Datetime

  • Для описания форматирования строк datetime используются коды и символы
  • Полный список доступен на strftime.org
Эффективный импорт данных с pandas

Форматирование Datetime

Код Значение Пример
%Y Год (4 цифры) 1999
%m Месяц (с ведущим нулём) 03
%d День (с ведущим нулём) 01
%H Час (24-часовой формат) 21
%M Минута (с ведущим нулём) 09
%S Секунда (с ведущим нулём) 05
Эффективный импорт данных с pandas

Разбор нестандартных дат

Таблица с данными даты и времени, выделен столбец с нестандартным форматом datetime

format_string = "%m%d%Y %H:%M:%S"

survey_df["Part2EndTime"] = pd.to_datetime(survey_df["Part2EndTime"], format=format_string)
Эффективный импорт данных с pandas

Разбор нестандартных дат

print(survey_df.Part2EndTime.head())
0   2016-03-29 21:27:25
1   2016-03-29 21:29:10
2   2016-03-29 21:28:21
3   2016-03-29 21:30:51
4   2016-03-29 21:31:54
Name: Part2EndTime, dtype: datetime64[ns]
Эффективный импорт данных с pandas

Давайте потренируемся!

Эффективный импорт данных с pandas

Preparing Video For Download...