python - 在 pandas/numpy 中将 float 转换为小时和分钟

标签 python pandas datetime numpy

我在 pd.DataFrame 中有几列,其中十进制分隔小时和分钟(例如,3.15 = 3 小时 15 分钟)。有没有一种快速的方法来转换它以便将数据识别为 h.m ? pandas Time Series 文档似乎不适用于我的案例。我没有也不想附加任何日期。

我试过:

# 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]') 

给出

         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

但是我想要

    a     b     c
0 04:50 02:12 08:23
1 02:30 01:13 09:14
2 03:17 09:13 07:45

我还需要以下类型的加/减列值 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')

那么你只需要使用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

您只能通过以下方式显示时间:

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

关于python - 在 pandas/numpy 中将 float 转换为小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174952/

相关文章:

python - 如何使用azureml中上传到pandas的数据集进行分析?

python - Pandas 将行与列值匹配

sql - 如何查找日期之间的状态

python - 在 Fabric(Python 库)中如何访问子程序中的 IP/主机名?

python - python中的常量字符串文件

python - 使用自定义格式的 pandas to_datetime 中的 KeyError

c# - jquery new Date() 在本地工作但不在线

mysql - 仅将时间戳字段与年份和月份进行比较

python - 如何在箱线图中显示 Pandas DataFrame 的最后一行

Python 新手 : manipulating arrays