在python中,日期似乎是一件棘手的事情,而从pandas TimeStamp中剥离日期却给我带来了很多麻烦。我想2013-09-2902:34:44
简单地09-29-2013
我有一个带有Created_date列的数据框:
Name: Created_Date, Length: 1162549, dtype: datetime64[ns]`
我已尝试.date()
在该系列上应用该方法,例如:df.Created_Date.date()
,但出现错误AttributeError: 'Series' object has no attribute 'date'
有人可以帮我吗?
map
在元素上:
In [239]: from operator import methodcaller
In [240]: s = Series(date_range(Timestamp('now'), periods=2))
In [241]: s
Out[241]:
0 2013-10-01 00:24:16
1 2013-10-02 00:24:16
dtype: datetime64[ns]
In [238]: s.map(lambda x: x.strftime('%d-%m-%Y'))
Out[238]:
0 01-10-2013
1 02-10-2013
dtype: object
In [242]: s.map(methodcaller('strftime', '%d-%m-%Y'))
Out[242]:
0 01-10-2013
1 02-10-2013
dtype: object
您可以datetime.date
通过调用date()
组成的Timestamp
元素的方法来获取原始对象Series
:
In [249]: s.map(methodcaller('date'))
Out[249]:
0 2013-10-01
1 2013-10-02
dtype: object
In [250]: s.map(methodcaller('date')).values
Out[250]:
array([datetime.date(2013, 10, 1), datetime.date(2013, 10, 2)], dtype=object)
然而, 另一种 方式,你可以做到这一点是通过调用未绑定Timestamp.date
方法:
In [273]: s.map(Timestamp.date)
Out[273]:
0 2013-10-01
1 2013-10-02
dtype: object
此方法最快,恕我直言,最易读。Timestamp
可在顶级pandas
模块中访问,如下所示:pandas.Timestamp
。我已将其直接导入以用于说明目的。
对象的date
属性DatetimeIndex
执行类似的操作,但是返回一个numpy
对象数组:
In [243]: index = DatetimeIndex(s)
In [244]: index
Out[244]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-10-01 00:24:16, 2013-10-02 00:24:16]
Length: 2, Freq: None, Timezone: None
In [246]: index.date
Out[246]:
array([datetime.date(2013, 10, 1), datetime.date(2013, 10, 2)], dtype=object)
对于较大的datetime64[ns]
Series
对象,调用Timestamp.date
速度比快,operator.methodcaller
后者比快lambda
:
In [263]: f = methodcaller('date')
In [264]: flam = lambda x: x.date()
In [265]: fmeth = Timestamp.date
In [266]: s2 = Series(date_range('20010101', periods=1000000, freq='T'))
In [267]: s2
Out[267]:
0 2001-01-01 00:00:00
1 2001-01-01 00:01:00
2 2001-01-01 00:02:00
3 2001-01-01 00:03:00
4 2001-01-01 00:04:00
5 2001-01-01 00:05:00
6 2001-01-01 00:06:00
7 2001-01-01 00:07:00
8 2001-01-01 00:08:00
9 2001-01-01 00:09:00
10 2001-01-01 00:10:00
11 2001-01-01 00:11:00
12 2001-01-01 00:12:00
13 2001-01-01 00:13:00
14 2001-01-01 00:14:00
...
999985 2002-11-26 10:25:00
999986 2002-11-26 10:26:00
999987 2002-11-26 10:27:00
999988 2002-11-26 10:28:00
999989 2002-11-26 10:29:00
999990 2002-11-26 10:30:00
999991 2002-11-26 10:31:00
999992 2002-11-26 10:32:00
999993 2002-11-26 10:33:00
999994 2002-11-26 10:34:00
999995 2002-11-26 10:35:00
999996 2002-11-26 10:36:00
999997 2002-11-26 10:37:00
999998 2002-11-26 10:38:00
999999 2002-11-26 10:39:00
Length: 1000000, dtype: datetime64[ns]
In [269]: timeit s2.map(f)
1 loops, best of 3: 1.04 s per loop
In [270]: timeit s2.map(flam)
1 loops, best of 3: 1.1 s per loop
In [271]: timeit s2.map(fmeth)
1 loops, best of 3: 968 ms per loop
请记住,的目标之一pandas
是在其之上提供一层,numpy
这样(大多数时候)您不必处理的底层细节ndarray
。因此,将原始datetime.date
对象放入数组的用途很有限,因为它们不对应于numpy.dtype
受支持的任何对象pandas
(pandas
仅支持datetime64[ns]
dtypes
[nanoseconds])。就是说,有时候您需要这样做。
问题内容: 我想从时间戳获取格式的日期。 我使用了下面的方法,但是没有给出正确的输出 但其给出的输出如下 日期–5月–2年–1 时间戳记的正确日期是2010年5月24日-1306249409 注意-时间戳是由我的应用程序中使用的Web服务接收的。 问题答案: 更好的方法 简单使用 方法上的错误 ,,.. etc只是类内部使用的常量int值 你可以得到所代表的日期由
本文向大家介绍js时间戳转yyyy-MM-dd HH-mm-ss工具类详解,包括了js时间戳转yyyy-MM-dd HH-mm-ss工具类详解的使用技巧和注意事项,需要的朋友参考一下 在web开发中,我们经常需要用js将时间戳转yyyy-MM-dd HH-mm-ss类似的格式,这样才适合我们的观感,那么我们该如何在js中将时间戳转换成这种格式呢?其实很简单,我们开发一个时间戳工具类,如下: 第一种
问题内容: 我正在尝试从Netezza将具有格式的记录插入Oracle,但是我得到的日期类型无效。 我该如何做到这一点? 问题答案: http://www.sqlfiddle.com/#!4/22115/1
如果我将视图更改为不强制转换,我不会得到错误,但结果是错误的。 有人知道我如何将这个日期格式化为这个特定的模式吗?我尝试使用TimeStamp、java.sql.date等,但没有任何效果...
问题内容: 通过将值放入构造函数中,我可以将unix时间戳转换为对象。例如:我可以将其作为。 但是在那之后,如何从该对象取回unix时间戳? 问题答案: 检索自格林尼治标准时间1970年1月1日传递给构造函数以来的毫秒数。从中获得Unix时间(相同,但以秒为单位)并不难。
问题内容: 我想将时间戳2011-03-10T11:54:30.207Z转换为10/03/2011 11:54:30.207。我怎样才能做到这一点?我想将ISO8601格式转换为UTC,然后UTC应该可以识别位置。请帮忙 异常:java.text.ParseException:无法解析的日期:“ 2011-03-10T11:54:30.207Z” 问题答案: 首先,您需要意识到,UTC实际上不是时