преобразование строки, которая выглядит как дата в дату - PullRequest
0 голосов
/ 19 мая 2018

Я читал много вопросов, которые конвертируют строку в datetime, но я не нашел строковую дату, которая выглядит как показано в этом кадре данных.

    idAviso                     timestamp idpostulante
 1111413600  2018-02-28T20:40:28.079-0500      0z5VvGv
 1112368499  2018-02-28T20:51:02.844-0500      0z5VvGv
 1112369554  2018-02-28T20:43:50.396-0500      0z5VvGv
 1112358250  2018-02-27T16:02:19.303-0500      0zB026d
 1112358250  2018-02-27T16:02:30.036-0500      0zB026d

Моя цель состоит в том, чтобы столбец timestamp преобразовал его в нечто подобное, чтобы затем я мог использовать его для некоторого анализа

    idAviso   timestamp idpostulante
 1111413600  2018-02-28      0z5VvGv
 1112368499  2018-02-28      0z5VvGv
 1112369554  2018-02-28      0z5VvGv
 1112358250  2018-02-27      0zB026d
 1112358250  2018-02-27      0zB026d

timestamp теперь должно бытьпеременная дата-время

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Это формат времени ISO8061 со смещением.

In [1]: x= '2018-02-28T20:40:28.079-0500'

In [2]: from dateutil.parser import parse

In [3]: parse(x)
Out[3]: datetime.datetime(2018, 2, 28, 20, 40, 28, 79000, tzinfo=tzoffset(None, -18000))

Для работы с ним в pandas Dataframe

In [7]: df = pd.DataFrame([x])

In [8]: df
Out[8]: 
                              0
0  2018-02-28T20:40:28.079-0500

In [9]: df[0]
Out[9]: 
0    2018-02-28T20:40:28.079-0500
Name: 0, dtype: object

In [10]: df[0].apply(parse)
Out[10]: 
0   2018-02-28 20:40:28.079000-05:00
Name: 0, dtype: datetime64[ns, tzoffset(None, -18000)]
0 голосов
/ 19 мая 2018

Просто удалите строку с .str[:10], а затем используйте pd.to_datetime(), например:

df['timestamp'] = pd.to_datetime(df['timestamp'].str[:10])

другие альтернативы:

df['timestamp'] = df['timestamp'].apply(pd.Timestamp)
df['timestamp'] = pd.to_datetime(df['timestamp'])  # offset by 5 hours

Полный пример:

import pandas as pd
import numpy as np

data = '''\
idAviso     timestamp                         idpostulante
1111413600  2018-02-28T20:40:28.079-0500      0z5VvGv
1112368499  2018-02-28T20:51:02.844-0500      0z5VvGv
1112369554  2018-02-28T20:43:50.396-0500      0z5VvGv
1112358250  2018-02-27T16:02:19.303-0500      0zB026d
1112358250  2018-02-27T16:02:30.036-0500      0zB026d'''

file = pd.compat.StringIO(data)
df = pd.read_csv(file, sep='\s+')

df['timestamp'] = pd.to_datetime(df['timestamp'].str[:10])

print(df)

Возвращает:

      idAviso  timestamp idpostulante
0  1111413600 2018-02-28      0z5VvGv
1  1112368499 2018-02-28      0z5VvGv
2  1112369554 2018-02-28      0z5VvGv
3  1112358250 2018-02-27      0zB026d
4  1112358250 2018-02-27      0zB026d

Также смотрите здесь:

https://github.com/pandas-dev/pandas/issues/16898

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