【问题标题】:Pandas DataFrame use Timedelta to set time in H:M:S:f format to 00:00:00:000Pandas DataFrame 使用 Timedelta 将 H:M:S:f 格式的时间设置为 00:00:00:000
【发布时间】:2021-12-14 10:57:27
【问题描述】:

我有一个带有以下列(first column = index) 的熊猫数据框:

0         14:43:45:921

1         14:43:45:923

2         14:43:45:925

我想修改这一栏,或者添加另一栏,时间从0开始:

0         00:00:00.000

1         00:00:00.002

2         00:00:00.004

到目前为止,我已经尝试了以下代码:

df['time'].apply(pd.Timedelta)

这给了我以下错误:

expected hh:mm:ss format

对我来说,问题是

a) 将时间格式HH:MM:SS:fff 转换为HH:MM:SS.fff

b) 让timedelta 函数工作。

有人有什么建议吗?谢谢!

【问题讨论】:

    标签: pandas dataframe timedelta string-to-datetime


    【解决方案1】:

    使用to_datetime:

    s = pd.to_datetime(df['time'], format='%H:%M:%S:%f')
    

    或者Series.str.replaceto_timedelta

    s = pd.to_timedelta(df['time'].str.replace('(:)(\d+)$', r'.\2'))
    

    然后减去第一个值:

    df['new'] = s.sub(s.iat[0])
    print (df)
               time                    new
    0  14:43:45:921        0 days 00:00:00
    1  14:43:45:923 0 days 00:00:00.002000
    2  14:43:45:925 0 days 00:00:00.004000
    

    如果需要时间:

    df['new'] = s.sub(s.iat[0])
    df['new1'] = df['new'].apply(lambda x: (pd.datetime.min + x).time())
    
    print (df)
               time                    new             new1
    0  14:43:45:921        0 days 00:00:00         00:00:00
    1  14:43:45:923 0 days 00:00:00.002000  00:00:00.002000
    2  14:43:45:925 0 days 00:00:00.004000  00:00:00.004000
    
    
    print (type(df.at[0, 'new']))
    <class 'pandas._libs.tslibs.timedeltas.Timedelta'>
    
    print (type(df.at[0, 'new1']))
    <class 'datetime.time'>
    

    【讨论】:

    • 您好,感谢您的解决方案!但是,我也想去掉日期,这样我就得到了从 00:00:00 开始的时间。
    • @M195 - 不容易,但可能。添加到答案。
    猜你喜欢
    • 2021-07-05
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多