当前位置: 首页 > 面试题库 >

从pandas时间戳获取MM-DD-YYYY

公冶浩慨
2023-03-14
问题内容

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受支持的任何对象pandaspandas仅支持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实际上不是时