And*_*rew 2 python datetime numpy pandas
我在 pd.DataFrame 中有几列,其中小数点分隔小时和分钟(例如,3.15 = 3 小时 15 分钟)。有没有一种快速的方法来转换它以便数据被识别为 hm ?pandas 时间序列文档似乎不适用于我的情况。我没有也不想附上任何日期。
我试过:
# create df
hour_min = pd.DataFrame({'a': [4.5, 2.3, 3.17],
'b': [2.12, 1.13, 9.13],
'c': [8.23, 9.14, 7.45]})
# convert to hours
hour_min.astype('timedelta64[h]')
Run Code Online (Sandbox Code Playgroud)
这使
a b c
0 04:00:00 02:00:00 08:00:00
1 02:00:00 01:00:00 09:00:00
2 03:00:00 09:00:00 07:00:00
Run Code Online (Sandbox Code Playgroud)
但我想要
a b c
0 04:50 02:12 08:23
1 02:30 01:13 09:14
2 03:17 09:13 07:45
Run Code Online (Sandbox Code Playgroud)
我还需要添加/减去列值 1.32 + 1.32 = 3.04 的以下类型的结果
我很确定应该有一个更有效的解决方案,但由于还没有人回答,这里有一个hacky解决方法:
import pandas as pd
hour_min = pd.DataFrame({'a': [4.5, 2.3, 3.17],
'b': [2.12, 1.13, 9.13],
'c': [8.23, 9.14, 7.45]})
def convert(number):
hour = ('%.2f' % number).split(sep='.')[0]
minute = ('%.2f' % number).split(sep='.')[1]
return pd.to_datetime(hour+":"+minute, format='%H:%M')
Run Code Online (Sandbox Code Playgroud)
然后你只需要使用applymap():
>>> hour_min = hour_min.applymap(convert)
>>> hour_min
a b c
0 1900-01-01 04:50:00 1900-01-01 02:12:00 1900-01-01 08:23:00
1 1900-01-01 02:30:00 1900-01-01 01:13:00 1900-01-01 09:14:00
2 1900-01-01 03:17:00 1900-01-01 09:13:00 1900-01-01 07:45:00
Run Code Online (Sandbox Code Playgroud)
您只能通过以下方式显示时间:
>>> for i in hour_min:
hour_min[i] = hour_min[i].dt.time
>>> hour_min
a b c
0 04:50:00 02:12:00 08:23:00
1 02:30:00 01:13:00 09:14:00
2 03:17:00 09:13:00 07:45:00
Run Code Online (Sandbox Code Playgroud)