python 3 pandas преобразовать время строки в гггг-мм-дд - PullRequest
1 голос
/ 12 января 2020

Представьте, что у меня есть следующие метки времени в кадре данных с именем df

           time
1          2019-05-03 15:26:37.000
2          2019-05-10 19:26:29.000
3          2019-05-10 23:39:07.000
4          2019-05-08 13:52:08.000

Я планирую преобразовать его в

           time
1          2019-05-03
2          2019-05-10
3          2019-05-10
4          2019-05-08

, чтобы я мог составить группу, чтобы подсчитать, как много точек в день

df2=pd.to_datetime(df['time'], format='%d-%b-%y')

возвращает следующие ошибки

ValueError: time data '2019-05-04 14:08:33.000' does not match format '%d-%b-%y' (match)

TypeError: Unrecognized value type: <class 'str'>

During handling of the above exception, another exception occurred:

Если я это сделаю:

request_time_date_df2=pd.to_datetime(ride_df['requested_time'], unit='D')

возврат

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_with_unit_to_datetime()

ValueError: could not convert string to float: '2019-05-04 14:08:33.000'

Если я

df2=pd.to_datetime(df['time'], format='%d-%b-%y', errors='ignore')

верну то же самое

           time
1          2019-05-03 15:26:37.000
2          2019-05-10 19:26:29.000
3          2019-05-10 23:39:07.000
4          2019-05-08 13:52:08.000

Есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 января 2020

Другое возможное решение:

df = pd.DataFrame({'time':['2019-05-03 15:26:37.000', '2019-05-10 19:26:29.000', '2019-05-10 23:39:07.000', '2019-05-08 13:52:08.000']})

df['time'] = pd.to_datetime(df['time']).dt.strftime('%Y-%m-%d')

print(df)

Отпечатки:

         time
0  2019-05-03
1  2019-05-10
2  2019-05-10
3  2019-05-08

ПРИМЕЧАНИЕ. Если вы хотите группировать по дням, вам не нужно предварительно форматировать дни, просто конвертируйте их на текущее время и посмотрите на pandas.Grouper (с частотой, установленной на 'D').

Например:

df = pd.DataFrame({'time':['2019-05-03 15:26:37.000', '2019-05-10 19:26:29.000', '2019-05-10 23:39:07.000', '2019-05-08 13:52:08.000'],
                   'data':[1, 1, 1, 1]})

df['time'] = pd.to_datetime(df['time'])

print(df.groupby(pd.Grouper(key='time', freq='D'))['data'].sum())

Отпечатки:

time
2019-05-03    1
2019-05-04    0
2019-05-05    0
2019-05-06    0
2019-05-07    0
2019-05-08    1
2019-05-09    0
2019-05-10    2
Freq: D, Name: data, dtype: int64
2 голосов
/ 12 января 2020

IIU C, вы можете использовать:

pd.to_datetime(df['time']).dt.normalize() # if series is a object dtype

Или:

df['time'].dt.normalize() #if series is a datetime dtype

1   2019-05-03
2   2019-05-10
3   2019-05-10
4   2019-05-08
Name: time, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...