将熊猫专栏转换为小时和分钟

时间:2020-04-26 16:41:38

标签: python pandas datetime

我在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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果只需要小时和分钟,则可以使用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

从那里,您可以访问值的hourminute属性

>>>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)

答案 2 :(得分:1)

您有一个索引,该索引具有用整数表示的HHMM时间值。为了将其转换为datetime dtype,必须首先创建可以通过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对象的方法访问小时和分钟。