【问题标题】:Sorting timestamps python排序时间戳python
【发布时间】:2018-12-22 23:56:50
【问题描述】:

我有一个pandasdf,其中包含Columntimestamps。一些timestamps 是在午夜之后。这些是 24 小时制的。我正在尝试在这些时间上增加 12 小时,以便保持一致。

import pandas as pd
import datetime as dt
import numpy as np

d = ({           
    'time' : ['9:00:00','10:00:00','11:00:00','12:00:00','01:00:00','02:00:00'], 
     })

df = pd.DataFrame(data=d)

我使用了另一个问题的以下代码。但我无法让它包含所有值。日期也不是必需的。

Convert incomplete 12h datetime-like strings into appropriate datetime type

ts = pd.to_datetime(df.time, format = '%H:%M:%S')
ts[ts.dt.hour == 12] -= pd.Timedelta(12, 'h')
twelve = ts.dt.time == dt.time(0,0,0)
newdate = ts.dt.date.diff() > pd.Timedelta(0)
midnight = twelve & newdate
noon = twelve & ~newdate
offset = pd.Series(np.nan, ts.index, dtype='timedelta64[ns]')
offset[midnight] = pd.Timedelta(0)
offset[noon] = pd.Timedelta(12, 'h')
offset.fillna(method='ffill', inplace=True)
ts = ts.add(offset, fill_value=0).dt.strftime('%H:%M:%S')
print(ts)

输出:

TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('O')

我的预期输出是

       time
0   9:00:00
1  10:00:00
2  11:00:00
3  12:00:00
4  13:00:00
5  14:00:00

【问题讨论】:

  • 谢谢@JohnZwinck。很有用
  • 不客气。您希望我们将您的问题作为该问题的副本来结束,还是您想自己写下您的问题的答案(然后接受)?

标签: python pandas time timedelta


【解决方案1】:

我认为需要将最后一行代码更改为 addfill_value=0 将缺失值替换为 ts ,然后将 time 替换为 python times 或 strftime 替换 strings:

ts = ts.add(offset, fill_value=0).dt.time
print (ts)
0    09:00:00
1    10:00:00
2    11:00:00
3    12:00:00
4    13:00:00
5    14:00:00
dtype: object

print (ts.apply(type))
0    <class 'datetime.time'>
1    <class 'datetime.time'>
2    <class 'datetime.time'>
3    <class 'datetime.time'>
4    <class 'datetime.time'>
5    <class 'datetime.time'>
dtype: object

ts = ts.add(offset, fill_value=0).dt.strftime('%H:%M:%S')
print (ts)
0    09:00:00
1    10:00:00
2    11:00:00
3    12:00:00
4    13:00:00
5    14:00:00
dtype: object

print (ts.apply(type))
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
3    <class 'str'>
4    <class 'str'>
5    <class 'str'>
dtype: object

【讨论】:

  • 谢谢@jezrael。我得到了一个错误。 ValueError:时间数据“13:00:00”与格式“%I:%M:%S”不匹配(匹配)
  • @PeterJames123 - 所以输入数据与样本中的数据不同?
  • 相同。我已经更新了问题以专门显示每一行代码
  • 采样日期。我刚刚关闭并重新打开了控制台。现在可以使用了!
  • @PeterJames123 - Supeeer,很高兴能帮上忙!
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多