python – Pandas中日期序列(不是索引)的算术
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Pandas中日期序列(不是索引)的算术,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2883字,纯文字阅读大概需要5分钟。
内容图文
(Python 2.7,Pandas 0.9)
这似乎是一件简单的事情,但我无法弄清楚如何使用Pandas计算数据框中两个日期列之间的差异.此数据帧已经有一个索引,因此不希望将任何列放入DateTimeIndex.
要从我使用的字符串转换每个日期列:
data.Date_Column = pd.to_datetime(data.Date_Column)
从那里,为了获得两列之间的经过时间,我做:
data.Closed_Date - data.Created_Date
返回错误:
TypeError: %d format: a number is required, not a numpy.timedelta64
检查两列上的dtypes会产生datetime64 [ns],并且数组中的各个日期都是类型时间戳.
我错过了什么?
编辑:
这是一个示例,我可以创建单独的DateTimeIndex对象并完成我想要的,但是当我尝试在数据帧的上下文中执行它时,它会失败.
Created_Date = pd.DatetimeIndex(data['Created_Date'], copy=True)
Closed_Date = pd.DatetimeIndex(data['Closed_Date'], copy=True)
Closed_Date.day - Created_Date.day
[Out] array([ -3, -16, 5, ..., 0, 0, 0])
现在相同但在数据帧中:
data.Created_Date = pd.DatetimeIndex(data['Created_Date'], copy=True)
data.Closed_Date = pd.DatetimeIndex(data.Closed_Date, copy=True)
data.Created_Date.day - data.Created_Date.day
AttributeError: 'Series' object has no attribute 'day'
如果你想玩它,这里有一些数据:
data['Created Date'][0:10].to_dict()
{0: '1/1/2009 0:00',
1: '1/1/2009 0:00',
2: '1/1/2009 0:00',
3: '1/1/2009 0:00',
4: '1/1/2009 0:00',
5: '1/1/2009 0:00',
6: '1/1/2009 0:00',
7: '1/1/2009 0:00',
8: '1/1/2009 0:00',
9: '1/1/2009 0:00'}
data['Closed Date'][0:10].to_dict()
{0: '1/7/2009 0:00',
1: nan,
2: '1/1/2009 0:00',
3: '1/1/2009 0:00',
4: '1/1/2009 0:00',
5: '1/12/2009 0:00',
6: '1/12/2009 0:00',
7: '1/7/2009 0:00',
8: '1/10/2009 0:00',
9: '1/7/2009 0:00'}
解决方法:
更新:一个有用的解决方法是使用DatetimeIndex构造函数(通常比应用程序快得多)粉碎它,例如:
DatetimeIndex(df['Created_Date']).day
在0.15中,这将在dt属性(以及其他日期时间方法)中可用:
df['Created_Date'].dt.day
你的错误是语法,虽然人们可能希望它能起作用但它不会:
data.Created_Date.day - data.Created_Date.day
AttributeError: 'Series' object has no attribute 'day'
对于像这样的更复杂的选择,您可以使用apply:
In [111]: df['sub'] = df.apply(lambda x: x['Created_Date'].day - x['Closed_Date'].day, axis=1)
In [112]: df[['Created_Date','Closed_Date','sub']]
Out[112]:
Created_Date Closed_Date sub
0 2009-01-07 00:00:00 2009-01-01 00:00:00 6
1 NaT 2009-01-01 00:00:00 9
2 2009-01-01 00:00:00 2009-01-01 00:00:00 0
3 2009-01-01 00:00:00 2009-01-01 00:00:00 0
4 2009-01-01 00:00:00 2009-01-01 00:00:00 0
5 2009-01-12 00:00:00 2009-01-01 00:00:00 11
6 2009-01-12 00:00:00 2009-01-01 00:00:00 11
7 2009-01-07 00:00:00 2009-01-01 00:00:00 6
8 2009-01-10 00:00:00 2009-01-01 00:00:00 9
9 2009-01-07 00:00:00 2009-01-01 00:00:00 6
要小心,你可能应该与这些NaT分开做一些事情:
In [114]: df.ix[1][1].day # NaT.day
Out[114]: -1
.
注意:在使用NaT的timedelta上使用.days时会出现类似的奇怪行为:
In [115]: df['sub2'] = df.apply(lambda x: (x['a'] - x['b']).days, axis=1)
In [116]: df['sub2'][1]
Out[116]: 92505
内容总结
以上是互联网集市为您收集整理的python – Pandas中日期序列(不是索引)的算术全部内容,希望文章能够帮你解决python – Pandas中日期序列(不是索引)的算术所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。