Python pandas date time, как преобразовать эти даты в pandas datetime? - PullRequest
0 голосов
/ 24 февраля 2019

Мои даты имеют вид Месяц, Год:

82013

102013

Но я хочу, чтобы они были обычными датами времени панд.Когда я вставляю эти даты в pd.datetime, я получаю

1970-01-01 00:00:00.000082013

Это очень неправильно.

Совет будет очень признателен, спасибо.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Использовать стандартный модуль Python datetime:

Python 3.7.2 (default, Jan 16 2019, 19:49:22) 
[GCC 8.2.1 20181215 (Red Hat 8.2.1-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> datetime.strptime('82013', '%m%Y')
datetime.datetime(2013, 8, 1, 0, 0)
>>> datetime.strptime('102013', '%m%Y')
datetime.datetime(2013, 10, 1, 0, 0)
>>>

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

0 голосов
/ 24 февраля 2019

Как сказал Роганджош, было бы лучше, если бы вы могли просто получить ваши даты в более простом формате.Однако, если вы застряли с этим, можете обойтись, просто указав pd.to_datetime ожидаемый формат .

dates = pd.Series(['82013', '102013'])
pd.to_datetime(dates, format='%m%Y')
0 голосов
/ 24 февраля 2019
df

     date
0   82013
1  102013

Сначала извлеките месяц и год в виде отдельных столбцов, используя str.extract:

u = df.date.astype(str).str.extract(r'^(?P<month>\d{1,2})(?P<year>\d{4})$', expand=True)

  month  year
0     8  2013
1    10  2013

Теперь позвольте pd.to_datetime взять верх.

pd.to_datetime(u.assign(day=1))

0   2013-08-01
1   2013-10-01
dtype: datetime64[ns]

Если недопустимые значения возможны, используйте

pd.to_datetime(u.assign(day=1), errors='coerce')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...