df['ArrivalDate'] =
...
936 2012-12-31
938 2012-12-29
965 2012-12-31
966 2012-12-31
967 2012-12-31
968 2012-12-31
969 2012-12-31
970 2012-12-29
971 2012-12-31
972 2012-12-29
973 2012-12-29
...
该列的元素是pandas.tslib.Timestamp.
我想要包括年份和月份.我认为会有简单的方法,但我无法弄清楚.
这是我尝试过的:
df['ArrivalDate'].resample('M', how = 'mean')
我收到以下错误:
Only valid with DatetimeIndex or Periodindex
然后我尝试了:
df['ArrivalDate'].apply(lambda(x):x[:-2])
我收到以下错误:
'Timestamp' object has no attribute '__getitem__'
有什么建议?
编辑:我有点想通了.
df.index = df['ArrivalDate']
然后,我可以使用索引重新采样另一列.
但我仍然想要一种重新配置整个列的方法.有任何想法吗?
解决方法:
您可以直接访问年份和月份属性,或请求datetime.datetime:
In [15]: t = pandas.tslib.Timestamp.Now()
In [16]: t
Out[16]: Timestamp('2014-08-05 14:49:39.643701', tz=None)
In [17]: t.to_pydatetime() #datetime method is deprecated
Out[17]: datetime.datetime(2014, 8, 5, 14, 49, 39, 643701)
In [18]: t.day
Out[18]: 5
In [19]: t.month
Out[19]: 8
In [20]: t.year
Out[20]: 2014
将年份和月份组合在一起的一种方法是对它们进行整数编码,例如:2014年8月的201408.在整个列中,您可以这样做:
df['YearMonth'] = df['ArrivalDate'].map(lambda x: 100*x.year + x.month)
或其许多变体.
但是,我并不是这样做的忠实粉丝,因为它会使日期对齐和算术变得更加痛苦,对于那些在没有相同约定的情况下遇到代码或数据的人来说尤其痛苦.更好的方法是选择一个月日约定,例如最终非美国假日工作日或第一天等,并将数据保留为具有所选日期约定的日期/时间格式.
日历模块可用于获取某些天的数值,例如最后的工作日.然后你可以这样做:
import calendar
import datetime
df['AdjustedDatetoEndOfMonth'] = df['ArrivalDate'].map(
lambda x: datetime.datetime(
x.year,
x.month,
max(calendar.monthcalendar(x.year, x.month)[-1][:5])
)
)
如果您正在寻找一种方法来解决将datetime列格式化为某种字符串化表示的简单问题,那么您可以使用datetime.datetime类中的strftime
函数,如下所示:
In [5]: df
Out[5]:
date_time
0 2014-10-17 22:00:03
In [6]: df.date_time
Out[6]:
0 2014-10-17 22:00:03
Name: date_time, dtype: datetime64[ns]
In [7]: df.date_time.map(lambda x: x.strftime('%Y-%m-%d'))
Out[7]:
0 2014-10-17
Name: date_time, dtype: object
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。