【问题标题】:Pandas increment time series by one minutePandas 将时间序列增加一分钟
【发布时间】:2015-01-16 15:11:55
【问题描述】:

我的数据是here

如果该列中的值包含“23:59:00”,我想为 STA_STD 中的值添加一分钟以获得 5 分钟的常规时间序列。添加一分钟也应该将日期更改为第二天 00:00 小时。

我的代码在这里

 dat=pd.read_csv("temp.csv")
 if(dat['STA_STD'].str.contains("23:59:00")):
     dat['STA_STD_NEW']= pd.to_datetime(dat[dat['STA_STD'].str.contains("23:59:00")]         ['STA_STD'])+datetime.timedelta(minutes=1)
 else:
     dat['STA_STD_NEW'] = dat['STA_STD']

这给了我以下错误:

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Pandas 文档here 谈到了同样的错误。

如果 value 包含“23:59:00”,遍历所有行并将 value 增加一分钟的过程是什么?

请指教。

【问题讨论】:

    标签: datetime pandas time-series


    【解决方案1】:

    两件事:

    • 您不能像这样使用 if/else 同时评估多个值(您需要遍历这些值,然后分别对每个值执行 if/else)。但在这种情况下,使用布尔索引要好得多。
    • str.contains 不适用于日期时间。但是您可以例如检查日期时间值的time 部分是否等于datetime.time(23, 59)

    一个小例子:

    In [2]: dat = pd.DataFrame({'STA_STD':pd.date_range('2012-01-01 23:50', periods=10, freq='1min')})
    
    In [3]: dat['STA_STD_NEW'] = dat['STA_STD']
    
    In [4]: dat.loc[dat['STA_STD'].dt.time == datetime.time(23,59), 'STA_STD_NEW'] += datetime.timedelta(minutes=1)
    
    In [5]: dat
    Out[5]:
                  STA_STD         STA_STD_NEW
    0 2012-01-01 23:50:00 2012-01-01 23:50:00
    1 2012-01-01 23:51:00 2012-01-01 23:51:00
    2 2012-01-01 23:52:00 2012-01-01 23:52:00
    3 2012-01-01 23:53:00 2012-01-01 23:53:00
    4 2012-01-01 23:54:00 2012-01-01 23:54:00
    5 2012-01-01 23:55:00 2012-01-01 23:55:00
    6 2012-01-01 23:56:00 2012-01-01 23:56:00
    7 2012-01-01 23:57:00 2012-01-01 23:57:00
    8 2012-01-01 23:58:00 2012-01-01 23:58:00
    9 2012-01-01 23:59:00 2012-01-02 00:00:00    <-- increment of 1 minute 
    

    使用dt.time 方法需要pandas >= 0.15

    【讨论】:

    • @Jeff,你能用示例代码解释一下你的方法吗
    • @Chandra @Jeff 表示您可以将datetime.timedelta(minutes=1) 替换为pd.Timedelta('1 minute')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2012-11-22
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多