gpt4 book ai didi

python - 从 pandas Timestamp 获取 MM-DD-YYYY

转载 作者:IT老高 更新时间:2023-10-28 21:08:10 26 4
gpt4 key购买 nike

日期在 python 中似乎是一件棘手的事情,我在简单地从 pandas 时间戳中删除日期时遇到了很多麻烦。我想从 2013-09-29 02:34:44 到简单的 09-29-2013

我有一个包含 Created_date 列的数据框:

Name: Created_Date, Length: 1162549, dtype: datetime64[ns]`

我已尝试在此系列上应用 .date() 方法,例如:df.Created_Date.date(),但我收到错误 AttributeError :“系列”对象没有属性“日期”

谁能帮帮我?

最佳答案

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

您可以通过调用构成 Timestamp 元素的 date() 方法来获取原始 datetime.date 对象>系列:

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)

另一种方法是调用未绑定(bind)的 Timestamp.date 方法:

In [273]: s.map(Timestamp.date)
Out[273]:
0 2013-10-01
1 2013-10-02
dtype: object

此方法最快,恕我直言,可读性最强。 Timestamp 可以在顶级 pandas 模块中访问,例如:pandas.Timestamp。出于说明目的,我直接导入了它。

DatetimeIndex 对象的 date 属性做类似的事情,但返回一个 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.dateoperator.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 对象的用途有限,因为它们不对应于 pandas numpy.dtype code>(pandas 仅支持 datetime64[ns] [that's nanoseconds] dtypes)。也就是说,有时您需要这样做。

关于python - 从 pandas Timestamp 获取 MM-DD-YYYY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com