标签: timedelta

需要timedelta对象列表中的平均值

我创建了一个timedelta对象列表,我需要得到这个列表的平均值.当我尝试做的时候

return (sum(delta_list)/(len(delta_list)-1))
Run Code Online (Sandbox Code Playgroud)

我得到TypeError:不支持的操作数类型+:'int'和'datetime.timedelta'

我是使用pythons datetime类的新手.我也想知道如何将这个平均值变成像天的格式:小时:分钟:我不需要任何小于分钟的东西.

python datetime timedelta

15
推荐指数
1
解决办法
7384
查看次数

在新的pandas数据帧列中计算年,月等的日期时间差异

我有一个像这样的pandas数据框:

Name    start        end
A       2000-01-10   1970-04-29
Run Code Online (Sandbox Code Playgroud)

我想添加一个新列,提供年份,月份,天数startend列之间的差异.

所以结果应该是这样的:

Name    start        end          diff
A       2000-01-10   1970-04-29   29y9m etc.
Run Code Online (Sandbox Code Playgroud)

diff列也可以是一个datetime对象或一个timedelta对象,但对我而言,关键在于,我可以轻松地从中获取年份月份.

我到现在为止尝试的是:

df['diff'] = df['end'] - df['start']
Run Code Online (Sandbox Code Playgroud)

这导致新列包含10848 days.但是,我不知道如何将天数转换为29y9m等.

python datetime timedelta pandas

15
推荐指数
5
解决办法
2万
查看次数

Python的timedelta:我不能在任何时间进入单位我想要整个差异的价值?

我试图有一些聪明的日期,因为在我的网站上发布了一个帖子("从那以后的几秒钟,从那以后的几个小时,从那以后的几周......")我正在使用存储在其中的utcnow和utc之间的datetime.timedelta差异一个帖子的数据库.

看起来,根据文档,我必须使用days属性和seconds属性来获取我想要的花哨日期字符串.

难道我不能在任何时间进入单位我想要的全部差异的价值?我错过了什么吗?

如果我能在几秒钟内得到完整的差异,那将是完美的.

python datetime timedelta

14
推荐指数
4
解决办法
1万
查看次数

如何将列设置为日期索引?

我的数据集如下:

       Date    Value
    1/1/1988    0.62
    1/2/1988    0.64
    1/3/1988    0.65
    1/4/1988    0.66
    1/5/1988    0.67
    1/6/1988    0.66
    1/7/1988    0.64
    1/8/1988    0.66
    1/9/1988    0.65
    1/10/1988   0.65
    1/11/1988   0.64
    1/12/1988   0.66
    1/13/1988   0.67
    1/14/1988   0.66
    1/15/1988   0.65
    1/16/1988   0.64
    1/17/1988   0.62
    1/18/1988   0.64
    1/19/1988   0.62
    1/20/1988   0.62
    1/21/1988   0.64
    1/22/1988   0.62
    1/23/1988   0.60
Run Code Online (Sandbox Code Playgroud)

我用这段代码来读取这些数据

df.set_index(df['Date'], drop=False, append=False, inplace=False, verify_integrity=False).drop('Date', 1)
Run Code Online (Sandbox Code Playgroud)

但问题是索引不是日期格式.那么问题是如何将此列设置为日期索引?

timedelta dataframe pandas

13
推荐指数
2
解决办法
2万
查看次数

Pandas:将timedelta列添加到datetime列(矢量化)

我有一个pandas数据框,有两列,一个日期列和一个int列,我只想将int列(以天为单位)添加到日期列.我找到了一个使用df.apply()的解决方案,但这对我的完整数据集来说太慢了.我没有看到大量关于以矢量化方式进行此操作的文档(我能找到的最接近的是这个),所以我想确保我找到的解决方案是最好的方法.

我的原始数据只是一列字符串作为一列int(天).

import pandas as pd
from datetime import timedelta

df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]], 
                  columns = ['ship_string','days_supply'])
print df  

ship_string  days_supply
0  2016-01-10           28
1  2016-05-11           28
2  2016-02-23           15
3  2015-12-08           30
Run Code Online (Sandbox Code Playgroud)

我的第一个想法(有效)是使用.apply如下:

def f(x):    
    return x['ship_date'] + timedelta(days=x['days_supply'] )

df['ship_date'] = pd.to_datetime(df['ship_string'])

df['supply_ended'] = df.apply(f,axis = 1)
Run Code Online (Sandbox Code Playgroud)

这很有效,但速度非常慢.我在下面发布了我的备用解决方案作为问题的答案,但我想确认它是"最佳实践".我没有找到很多关于将时间线列添加到熊猫日期中的好线程(特别是以矢量化的方式),所以我想添加一个更友好的用户,希望它能帮助下一个可怜的灵魂尝试做这个.

vectorization timedelta pandas

13
推荐指数
1
解决办法
8676
查看次数

查找pandas df中timedelta对象的均值和标准差

我想从下面显示的两列中计算一个meanstandard deviation一个timedelta银行dataframe.当我运行代码(也显示如下)时,我得到以下错误:

pandas.core.base.DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)

我的数据帧:

   bank                          diff
   Bank of Japan                 0 days 00:00:57.416000
   Reserve Bank of Australia     0 days 00:00:21.452000
   Reserve Bank of New Zealand  55 days 12:39:32.269000
   U.S. Federal Reserve          8 days 13:27:11.387000
Run Code Online (Sandbox Code Playgroud)

我的代码:

means = dropped.groupby('bank').mean()
std = dropped.groupby('bank').std()
Run Code Online (Sandbox Code Playgroud)

python datetime mean timedelta pandas

13
推荐指数
3
解决办法
6842
查看次数

当timedelta.days小于1时,在python中确定"days"

如果这是密集的,请提前抱歉.我试图找到自上次发布推文以来的日子.我遇到的问题是日期不同,例如今天和昨天,但没有足够的时间过去是一个完整的"日子".

# "created_at" is part of the Twitter API, returned as UTC time. The 
# timedelta here is to account for the fact I am on the west coast, USA 
lastTweetAt =  result.created_at + timedelta(hours=-8)

# get local time
rightNow = datetime.now()

# subtract the two datetimes (which gives me a timedelta)
dt = rightNow - lastTweetAt

# print the number of days difference
print dt.days
Run Code Online (Sandbox Code Playgroud)

问题是,如果我昨天下午5点发布推文并且今天上午8点正在运行脚本,那么仅过了15个小时,即0天.但显然我想说自从我上一条推文以来已经过了1天,如果是昨天的话.并且添加"+1"的补丁并没有帮助,因为如果我今天发推文,我希望结果为0.

有没有比使用timedelta更好的方法来获得差异?


解决方案 由Matti Lyra提供

答案是在日期时调用.date(),以便将它们转换为更粗糙的日期对象(没有时间戳).正确的代码如下:

# "created_at" is part of the Twitter API, …
Run Code Online (Sandbox Code Playgroud)

python datetime date timedelta

12
推荐指数
2
解决办法
4万
查看次数

为什么找不到Python日期时间delta?

我想用mmddyyyy格式制作一系列日期.日期将从当天开始,然后在未来两周内开始.所以这一切都取决于开始日期.当我运行我的代码时,我得到一个错误,指出:

Traceback (most recent call last):
File "timeTest.py", line 8, in <module>
day = datetime.timedelta(days=i)
AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会这样,因为在网上搜索后,我注意到人们正在以这种方式使用'timedelta'.

这是我的代码:

import time
from datetime import datetime, date, time, timedelta

dayDates = []
today = datetime.now()
dayDates.append(today.strftime("%m%d%Y"))
for i in range(0,14):
    day = today + datetime.timedelta(days=i)
    print day
Run Code Online (Sandbox Code Playgroud)

python timedelta python-datetime

12
推荐指数
1
解决办法
3万
查看次数

从TimeDelta到Pandas的漂浮日

我有一个TimeDelta列,其值如下所示:

2天21:54:00.000000000

我想有一个表示天数的浮点数,让我们说这里2 + 21/24 = 2.875,忽略了分钟数.有一个简单的方法吗?我看到了一个答案

res['Ecart_lacher_collecte'].apply(lambda x: float(x.item().days+x.item().hours/24.))
Run Code Online (Sandbox Code Playgroud)

但我得到"AttributeError:'str'对象没有属性'item'"

Numpy版本是'1.10.4'Pandas版本是u'0.17.1'

这些列最初是通过以下方式获得的:

lac['DateHeureLacher'] = pd.to_datetime(lac['Date lacher']+' '+lac['Heure lacher'],format='%d/%m/%Y %H:%M:%S')
cap['DateCollecte'] = pd.to_datetime(cap['Date de collecte']+' '+cap['Heure de collecte'],format='%d/%m/%Y %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

在第一个脚本中.然后在第二个:

res = pd.merge(lac, cap, how='inner', on=['Loc'])
res['DateHeureLacher']  = pd.to_datetime(res['DateHeureLacher'],format='%Y-%m-%d %H:%M:%S')
res['DateCollecte']  = pd.to_datetime(res['DateCollecte'],format='%Y-%m-%d %H:%M:%S')
res['Ecart_lacher_collecte'] = res['DateCollecte'] - res['DateHeureLacher']
Run Code Online (Sandbox Code Playgroud)

也许将它保存到csv将其类型更改回字符串?我想要做的转变是在第三个脚本中.

Sexe_x  PiegeLacher latL    longL   Loc Col_x   DateHeureLacher Nb envolees PiegeCapture    latC    longC   Col_y   Sexe_y  Effectif    DateCollecte    DatePose    Ecart_lacher_collecte   Dist_m
M   Q0-002  1629238 237877  H   Rouge   2011-02-04 17:15:00 928 Q0-002  1629238 …
Run Code Online (Sandbox Code Playgroud)

python datetime series timedelta pandas

11
推荐指数
2
解决办法
1万
查看次数

使用 datetime.timedelta 添加年份

我正在用 Python 做一些时间计算。

目标:

其中一部分是试图:

给定一个日期,加上时间间隔(X 年,X 个月,X 周),返回日期

IE

  • 输入参数:input_time (datetime.date), interval (datetime.timedelta)
  • 返回:datetime.date

我查看了 datetime 和datetime.timedelta 文档

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, week=0)¶。

如果我想增加一定数量的小时数或周数,这些似乎效果很好。然而,

问题:

  • 我正在尝试实施诸如日期 + 1 年之类的操作,但无法弄清楚

例如

start = datetime.datetime(2000, 1, 1)
# expected output: datetime.datetime(2001, 1, 1)


# with the weeks, etc arguments given in timedelta, this fails unsurprisingly e.g 
start + datetime.timedelta(weeks = 52)

# returns datetime.datetime(2000, 12, 30, 0, 0)

Run Code Online (Sandbox Code Playgroud)

  • 使用 datetime 的基本工具是否可以进行基于年份的操作 - 如果可以,我将如何进行?

  • 我意识到对于年份示例,我可以只做 …

python datetime timedelta python-dateutil

11
推荐指数
3
解决办法
1万
查看次数