Преобразование списка строк списка в дату в python для моделирования временных рядов - - PullRequest
2 голосов
/ 11 марта 2019

Мое требование - учитывать точки данных для определенного диапазона.

, как указано ниже

train_period = [
['7-31-2013', '12-31-2014'],
['8-31-2013', '1-31-2015'],
['9-31-2013', '2-28-2015'],
['10-31-2013','3-31-2015'],
['11-31-2013', '4-30-2015']
]

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

"Type Error: strptime() argument 1 must be str, not list"

DATE = [datetime.strptime(x,'%m/%d/%Y %H:%M') for x in train_period]

Я знаю, что это из-за списка списка.Пожалуйста, помогите, как решить.

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Просто используйте понимание вложенного списка:

from datetime import datetime

train_period = [
['7-31-2013', '12-31-2014'],
['8-31-2013', '1-31-2015'],
['9-31-2013', '2-28-2015'],
['10-31-2013','3-31-2015'],
['11-31-2013', '4-30-2015']
]

DATE = [[datetime.strptime(y,'%m/%d/%Y %H:%M') for y in x] for x in train_period]

Обратите внимание, что ваш шаблон неверен. Попробуйте %m-%d-&Y. Однако ваши данные содержат данные 31 сентября и 31 ноября, поэтому вам придется это исправить.

1 голос
/ 11 марта 2019

В зависимости от результата, который вы хотите использовать, используйте один из этих двух операторов понимания списка:

  • Первый даст вам список списка
  • Второй даст вам плоский список

Код:

from datetime import datetime

train_period = [
['7-31-2013', '12-31-2014'],
['8-31-2013', '1-31-2015'],
['9-30-2013', '2-28-2015'],
['10-31-2013','3-31-2015'],
['11-30-2013', '4-30-2015']
]


DATE = [[datetime.strptime(y,'%m-%d-%Y') for y in x] for x in train_period]
print(DATE)
print("====")
DATE = [datetime.strptime(y,'%m-%d-%Y') for x in train_period for y in x]
print(DATE)

Выход:

[[datetime.datetime(2013, 7, 31, 0, 0), datetime.datetime(2014, 12, 31, 0, 0)], [datetime.datetime(2013, 8, 31, 0, 0), datetime.datetime(2015, 1, 31, 0, 0)], [datetime.datetime(2013, 9, 30, 0, 0), datetime.datetime(2015, 2, 28, 0, 0)], [datetime.datetime(2013, 10, 31, 0, 0), datetime.datetime(2015, 3, 31, 0, 0)], [datetime.datetime(2013, 11, 30, 0, 0), datetime.datetime(2015, 4, 30, 0, 0)]]
====
[datetime.datetime(2013, 7, 31, 0, 0), datetime.datetime(2014, 12, 31, 0, 0), datetime.datetime(2013, 8, 31, 0, 0), datetime.datetime(2015, 1, 31, 0, 0), datetime.datetime(2013, 9, 30, 0, 0), datetime.datetime(2015, 2, 28, 0, 0), datetime.datetime(2013, 10, 31, 0, 0), datetime.datetime(2015, 3, 31, 0, 0), datetime.datetime(2013, 11, 30, 0, 0), datetime.datetime(2015, 4, 30, 0, 0)]

Также вам следует изменить шаблон для отметки времени на %m-%d-%Y, иначе у вас будут некоторые ошибки, поскольку datetime не сможет интерпретировать строку и построить объект даты.

ValueError: time data '7-31-2013' does not match format '%m-%d-%Y %H:%M'

И последнее, но не менее важное: ваша строка должна быть действительной датой !!! (нет 31st of Sept или 31st of Nov)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...