【问题标题】:Transform multiple format Duration Data to common formatted '%H%M%S' . The %M part of the format (minutes) is inconsistent将多种格式的持续时间数据转换为通用格式的 '%H%M%S' 。格式(分钟)的 %M 部分不一致
【发布时间】:2020-10-14 05:32:52
【问题描述】:

我有 Duration 数据,它是一个具有多种格式的对象,尤其是在冒号之间的分钟部分。任何想法,我如何转换这些数据。我尝试了所有可以想象的正则表达式(除了正确的答案:)),这是我苦苦挣扎的主要部分。例如,下面是我尝试对分钟列进行零填充。

df['temp'] = df['temp'].replace(':?:', ':0?:', regex=True)

输入:

    Duration
0   00:0:00
1   00:00:00
2   00:8:00
3   00:08:00
4   00:588:00
5   09:14:00

预期输出选项#1(时间格式):

    Duration
0   00:00:00
1   00:00:00
2   00:08:00
3   00:08:00
4   09:48:00
5   09:14:00

我的最终目标是获取会议记录,因此另一种可接受的格式是:

预期输出选项 #2(分钟 - 整数或浮点数):

    Minutes
0   0
1   0
2   8
3   8
4   588
5   554

【问题讨论】:

    标签: python pandas time duration


    【解决方案1】:

    我们可以pd.to_timedelta:

    pd.to_timedelta(df.Duration)
    

    输出:

    0   00:00:00
    1   00:00:00
    2   00:08:00
    3   00:08:00
    4   09:48:00
    5   09:14:00
    Name: Duration, dtype: timedelta64[ns]
    

    或选项 2 - 分钟:

    pd.to_timedelta(df.Duration).dt.total_seconds()/60
    

    输出:

    0      0.0
    1      0.0
    2      8.0
    3      8.0
    4    588.0
    5    554.0
    Name: Duration, dtype: float64
    

    【讨论】:

    • 我忘了pd.to_timedelta()谢谢!
    【解决方案2】:

    我们可以用mulsplit

    df.Duration.str.split(':',expand=True).astype(int).mul([60,1,1/60]).sum(1)
    0      0.0
    1      0.0
    2      8.0
    3      8.0
    4    588.0
    5    554.0
    dtype: float64
    

    【讨论】:

    • 这是我之前被卡住后接下来要尝试的,但我不知道你可以在拆分后与这样的列表相乘。凉爽的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 2019-01-28
    • 2020-10-16
    • 2019-01-01
    • 2022-12-06
    相关资源
    最近更新 更多