【问题标题】:Python, Replace all array values with formatted stringPython,用格式化字符串替换所有数组值
【发布时间】:2017-08-11 08:41:20
【问题描述】:

我有一个由十进制小时组成的 numpy 数组,如下所示:

13.1 13.2 13.3 13.4
14.1 14.2 14.3 14.4
15.1 15.2 15.3 15.4

我想做的是将此数组转换为时间字符串,然后用自定义字符串格式替换此数组中的所有值。我这样计算时间:

hours = int(time)
minutes = int((time*60) % 60)
seconds = int((time*3600) % 60)

从那里进行转换以获得时间字符串:

ftime = "{}:{}:{}".format(str(hours), str(minutes), str(seconds))

最后我希望使用这个格式化规则并用它替换数组中的所有值,所以我得到这样的结果:

13:06:00 13:12:00 13:18:00 13:24:00
14:06:00 14:12:00 14:18:00 14:24:00
15:06:00 15:12:00 15:18:00 15:24:00

最好的方法是什么?

【问题讨论】:

    标签: python arrays string numpy


    【解决方案1】:

    您可以简单地将数组与代表 1 小时的 numpy.timedelta64() 对象相乘。

    dates = np.array(hours * np.timedelta64(3600, 's'), dtype=str)
    
    print(dates)
    # [['13:06:00' '13:12:00' '13:18:00' '13:24:00']
    #  ['14:06:00' '14:12:00' '14:18:00' '14:24:00']
    #  ['15:06:00' '15:12:00' '15:18:00' '15:24:00']]
    

    【讨论】:

    • 此解决方案与第一个解决方案同样有效,但由于它是单行解决方案,因此对我来说更可取,我将使用这个解决方案,所以谢谢。跨度>
    【解决方案2】:

    您可以使用np.vectorize 使函数元素变得明智。

    import numpy as np
    
    def format_time(time):
        hours = int(time)
        minutes = int((time*60) % 60)
        seconds = int((time*3600) % 60)
        return "{:02}:{:02}:{:02}".format(hours, minutes, seconds)
    
    format_time = np.vectorize(format_time)
    
    result = format_time(array)
    

    【讨论】:

    • 是的,这正是我想要的,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 2016-01-07
    • 2017-06-02
    • 2017-03-20
    • 2022-08-17
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多