注册 登录
编程论坛 Python论坛

关于datetime

lxping08 发布于 2023-05-09 23:12, 248 次点击
请问下,不知对返回一年的第几周也没向量化的操作,而不是通过isocalendar()逐个返回!
我们知道,通过dt访问器对年月季可实现向量化,不知哪位大神知道不?
31 回复
#2
wp2319572023-05-10 08:13
以下是引用lxping08在2023-5-9 23:12:34的发言:

 请问下,不知对返回一年的第几周也没向量化的操作,而不是通过isocalendar()逐个返回!
我们知道,通过dt访问器对年月季可实现向量化,不知哪位大神知道不?

哪方面内容的  PADAS吗
#3
sheeboard2023-05-10 08:35
pandas的apply,numpy的vectorize
#4
阳光上的桥2023-05-10 08:40
返回一年的第几周,一是可以使用isocalendar().week,二是使用strftime("%U"),注意后者是文本
#5
lxping082023-05-10 10:04
回复 4楼 阳光上的桥
我是不想用循环,直接向量化,对一组Series。理解我的意思了吧版主
#6
阳光上的桥2023-05-10 12:23
我不明白为什么要循环,请看下面的例子:

只有本站会员才能查看附件,请 登录


程序代码:

import datetime
today = datetime.date(2023, 5, 10)
w = today.isocalendar().week
print(w)
#7
sheeboard2023-05-10 12:28
以下是引用阳光上的桥在2023-5-10 12:23:21的发言:

我不明白为什么要循环,请看下面的例子:




import datetime
today = datetime.date(2023, 5, 10)
w = today.isocalendar().week
print(w)

是一组时间series,不用写for循环。
#8
lxping082023-05-10 13:26
回复 7楼 sheeboard
你是2023, 5, 10这一天的,哪是一组向量啊
#9
sheeboard2023-05-10 13:40
以下是引用lxping08在2023-5-10 13:26:41的发言:

你是2023, 5, 10这一天的,哪是一组向量啊

看3楼回复
#10
lxping082023-05-10 14:56
回复 3楼 sheeboard
这两个函数可实现向量化???
#11
lxping082023-05-10 15:03
回复 9楼 sheeboard
对一直日期,你用这两个函数实现下,比如2023年4月份的所有日期,返回每日的第几周
#12
sheeboard2023-05-10 15:09
以下是引用lxping08在2023-5-10 14:56:25的发言:

这两个函数可实现向量化???

vectorize中文意思就是向量化。

[此贴子已经被作者于2023-5-10 15:10编辑过]

#13
lxping082023-05-10 15:11
回复 12楼 sheeboard
这个谁还不认识几个英文啊版主
#14
sheeboard2023-05-10 15:28
程序代码:
import pandas as pd

def get_week(x):
    return x.isocalendar().week

df=pd.DataFrame(pd.date_range("2023/04/01","2023/04/30"),columns=['april'])
df['week']=df['april'].apply(get_week)

只有本站会员才能查看附件,请 登录

参考

[此贴子已经被作者于2023-5-10 15:33编辑过]

#15
lxping082023-05-10 15:33
回复 14楼 sheeboard
我的意思,不要去写函数,直接有内置的函数可调用
#16
lxping082023-05-10 15:34
回复 15楼 lxping08
直接用循环还一条语句呢,只不过运行效率有点慢而已
#17
lxping082023-05-10 15:37
回复 14楼 sheeboard
这样,还不如直接用lamda去定义函数呢
#18
sheeboard2023-05-10 15:40
不知道你什么意思,想要表达什么结果。

[此贴子已经被作者于2023-5-10 15:42编辑过]

#19
lxping082023-05-10 15:52
回复 18楼 sheeboard
版主,首先还得感谢你的热心分享,大家总是在交流中相互进步。我想表达的是,对十万级别的记录,有内置函数的话跑得更快!尽量不去用循环,再请教下,貌似我的3.9版本没week属性的,只能用元组的索引去提取哈!AttributeError: 'tuple' object has no attribute 'week'
#20
sheeboard2023-05-10 16:05
代码放上来看看
#21
lxping082023-05-10 20:37
回复 20楼 sheeboard
week_=df_['date'].map(lambda x:x.isocalendar().week)
运行上面的就弹出:AttributeError: 'tuple' object has no attribute 'week
#22
sheeboard2023-05-10 20:50
python版本没问题的,我这里跑出来也是对的,可能是date列数据类型不对,df.dtypes看一下,如果不是datetime64的用to_datetime先转一下。

[此贴子已经被作者于2023-5-10 20:57编辑过]

#23
lxping082023-05-10 21:08
以下是引用sheeboard在2023-5-10 15:28:56的发言:

import pandas as pd

def get_week(x):
    return x.isocalendar().week

df=pd.DataFrame(pd.date_range("2023/04/01","2023/04/30"),columns=['april'])
df['week']=df['april'].apply(get_week)

参考

就是把你这个复制过去,也是弹出这样的错误!
#24
lxping082023-05-10 21:11
回复 22楼 sheeboard
df_['date']=df_['date'].apply(pd.to_datetime)
我就是转了的

[此贴子已经被作者于2023-5-10 21:39编辑过]

#25
lxping082023-05-10 21:13
回复 22楼 sheeboard
april    datetime64[ns]
dtype: object
#26
sheeboard2023-05-10 21:19
只有本站会员才能查看附件,请 登录
#27
lxping082023-05-10 21:22
以下是引用sheeboard在2023-5-10 21:19:18的发言:

你这个是啥编辑器啊,我用的是pycharm
#28
sheeboard2023-05-10 21:26
以下是引用lxping08在2023-5-10 21:11:26的发言:

df_['date']=df_['date'].apply(pd.to_datetime)
我就是转了的,要不我跑不了的,我下面好多代码要跑啊,这个只是其中的一个小脚本而已。想着提高效率,才问的

指定format看一下。
#29
sheeboard2023-05-10 21:30

to_datetime这个不用apply,df_['date']=pd.to_datetime(df_['date'],format=%Y/%m/%d %H:%M:%S)
'%Y/%m/%d %H:%M:%S'根据实际情况改

[此贴子已经被作者于2023-5-10 21:32编辑过]

#30
lxping082023-05-10 21:43
回复 29楼 sheeboard
这个没关系的,适用范围不同,前者针对的是DF数据结构的,后者字符串列表之类的
#31
lxping082023-05-10 21:45
我就是把你的代码复制过去也是这么个错误,不知道是否没安装啥库
#32
lxping082023-05-10 21:50
回复 29楼 sheeboard
df_['date']=pd.to_datetime(df_['date'],format='%Y/%m/%d %H:%M:%S')
return x.isocalendar().week
AttributeError: 'tuple' object has no attribute 'week'
还是一样的错误,跑不下去了
1