Конвертировать Pandas столбец в часы и минуты - PullRequest
1 голос
/ 26 апреля 2020

У меня есть одно поле в Pandas DataFrame в целочисленном формате. Как преобразовать в формат DateTime и добавить столбец в мой DataFrame? В частности, мне нужны часы и минуты.
Пример:

  • Имя фрейма данных: df
  • Столбец в виде списка: df.index
  • dtype = 'int64'
  • Пример данных в df.index - [0, 15, 30, 45, 100 , 115, 130, 145, 200 ... 2300, 2315, 2330, 2345]

Я пытался pd.to_datetime(df.index, format=''), но он возвращает неправильный формат.

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Если вам нужны только часы и минуты, вы можете использовать datetime.time объекты.

import datetime

def int_to_time(i):
    if i < 60:
        return datetime.time(0, i)
    elif i < 1000:
        return datetime.time(int(str(i)[0]), int(str(i)[1:]))
    else:
        return datetime.time(int(str(i)[0:2]), int(str(i)[2:]))

df.index.apply(int_to_time)

Пример

import datetime
import numpy as np

ints = [i for i in np.random.randint(0, 2400, 100) if i % 100 < 60][0:5]
df = pd.DataFrame({'a': ints})

>>>df
0  1559
1  1712
2  1233
3   953
4   938

>>>df['a'].apply(int_to_time)
0    15:59:00
1    17:12:00
2    12:33:00
3    09:53:00
4    09:38:00

Оттуда вы можете получить доступ к hour и minute свойства значений

>>>df['a'].apply(int_to_time).apply(lambda x: (x.hour, x.minute))
0    (15, 59)
1    (17, 12)
2    (12, 33)
3     (9, 53)
4     (9, 38)
1 голос
/ 26 апреля 2020

У вас есть индекс со значениями времени в виде ЧЧММ, представленных целым числом. Чтобы преобразовать это в тип dtime datetime, вы должны сначала создать строки, которые могут быть правильно преобразованы методом to_datetime().

time_strs = df.index.astype(str).str.zfill(4)

Это преобразует все целочисленные значения в строки с нулевым заполнением до 4 символов, поэтому 15 становится, например, строкой "0015".

Теперь вы можете использовать формат "%H%M" для преобразования в объект даты и времени:

pd.to_datetime(time_strs, format="%H%M")

И затем используйте методы объектов datetime для доступа к часам и минутам.

1 голос
/ 26 апреля 2020
import pandas as pd
    df = pd.DataFrame({'time':[0, 15, 30, 45, 100, 115, 130, 145, 200, 2300, 2315, 2330, 2345]})

df.set_index('time', inplace=True)

df['datetime_dtype'] = pd.to_datetime(df.index, format='%H', exact=False)

df['str_dtype'] = df['datetime_dtype'].astype(str).str[11:16]

print(df)


datetime_dtype  str_dtype
time        
0   1900-01-01 00:00:00 00:00
15  1900-01-01 15:00:00 15:00
30  1900-01-01 03:00:00 03:00
45  1900-01-01 04:00:00 04:00
100 1900-01-01 10:00:00 10:00
115 1900-01-01 11:00:00 11:00
130 1900-01-01 13:00:00 13:00
145 1900-01-01 14:00:00 14:00
200 1900-01-01 20:00:00 20:00
2300    1900-01-01 23:00:00 23:00
2315    1900-01-01 23:00:00 23:00
2330    1900-01-01 23:00:00 23:00
2345    1900-01-01 23:00:00 23:00

print(df.dtypes)

datetime_dtype    datetime64[ns]
str_dtype                 object
dtype: object

Если вы хотите вернуться в этот год, вы можете использовать дельту времени.

delta = pd.Timedelta(weeks=6278, hours=0, minutes=0)
df['datetime_dtype_2020'] = df['datetime_dtype'] + delta

print(df)

    datetime_dtype  str_dtype   datetime_dtype_2020
time            
0   1900-01-01 00:00:00 00:00   2020-04-27 00:00:00
15  1900-01-01 15:00:00 15:00   2020-04-27 15:00:00
30  1900-01-01 03:00:00 03:00   2020-04-27 03:00:00
45  1900-01-01 04:00:00 04:00   2020-04-27 04:00:00
100 1900-01-01 10:00:00 10:00   2020-04-27 10:00:00
115 1900-01-01 11:00:00 11:00   2020-04-27 11:00:00
130 1900-01-01 13:00:00 13:00   2020-04-27 13:00:00
145 1900-01-01 14:00:00 14:00   2020-04-27 14:00:00
200 1900-01-01 20:00:00 20:00   2020-04-27 20:00:00
2300    1900-01-01 23:00:00 23:00   2020-04-27 23:00:00
2315    1900-01-01 23:00:00 23:00   2020-04-27 23:00:00
2330    1900-01-01 23:00:00 23:00   2020-04-27 23:00:00
2345    1900-01-01 23:00:00 23:00   2020-04-27 23:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...