python – 使用不同偏移向量的Pandas矢量化日期偏移操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用不同偏移向量的Pandas矢量化日期偏移操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2586字,纯文字阅读大概需要4分钟。
内容图文
![python – 使用不同偏移向量的Pandas矢量化日期偏移操作](/upload/InfoBanner/zyjiaocheng/697/ba557df6a3d544fc9a9c61dacebe0b0f.jpg)
我正在尝试执行以下操作,但似乎不支持此模式下的矢量化操作.
import pandas as pd
df=pd.DataFrame([[2017,1,15,1],
[2017,1,15,2],
[2017,1,15,3],
[2017,1,15,4],
[2017,1,15,5],
[2017,1,15,6],
[2017,1,15,7]],
columns=['year','month','day','month_offset'])
df['date']=df.apply(lambda g: pd.datetime(g.year,g.month,g.day),axis=1)
df['offset']=df.apply(lambda g: pd.offsets.MonthEnd(g.month_offset),axis=1)
df['date_offset']=df.date+df.offset
这是为代码段中的最后一个语句返回的警告:
C:\Python3.5.2.3\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\pandas\core\ops.py:533: PerformanceWarning: Adding/subtracting array of DateOffsets to Series not vectorized
“Series not vectorized”, PerformanceWarning)
由于性能优势,我希望将其作为矢量化操作.
谢谢.
编辑
最后,比较@ john-zwinck的后续方法:
import time
import pandas as pd
import numpy as np
df=pd.DataFrame([[2017,1,1,1],
[2017,1,1,2],
[2017,1,1,3],
[2017,1,1,4],
[2017,1,1,5],
[2017,1,1,6],
[2017,1,1,7]],
columns=['year','month','day','month_offset'])
df['mydate']=df.apply(lambda g:
pd.datetime(g.year,g.month,g.day),axis=1)
start_time=time.time()
df['pandas_offset']=df.apply(lambda g: g.mydate +
pd.offsets.MonthEnd(g.month_offset),axis=1)
end_time=time.time()
print('Method1 {} seconds'.format(end_time-start_time))
start_time=time.time()
df['numpy_offset']=(df.mydate.values.astype('M8[M]')+
df.month_offset.values * np.timedelta64(1, 'M')).astype('M8[D]') -
np.timedelta64(1, 'D')
end_time=time.time()
print('Method3 with numpy vectorization {} seconds'.format(end_time-
start_time))
结果:
index year month day month_offset mydate offset1 final
0 2017 1 1 1 2017-01-01 2017-01-31 2017-01-31
1 2017 1 1 2 2017-01-01 2017-02-28 2017-02-28
2 2017 1 1 3 2017-01-01 2017-03-31 2017-03-31
3 2017 1 1 4 2017-01-01 2017-04-30 2017-04-30
4 2017 1 1 5 2017-01-01 2017-05-31 2017-05-31
5 2017 1 1 6 2017-01-01 2017-06-30 2017-06-30
6 2017 1 1 7 2017-01-01 2017-07-31 2017-07-31
runfile('C:/bitbucket/test/vector_dates.py', wdir='C:/bitbucket/test')
Method 1 0.003999948501586914 seconds
Method 2 with numpy vectorization 0.0009999275207519531 seconds
显然numpy快得多
解决方法:
一个真正的矢量化方法是从month_offset构造一个numpy.timedelta64数组,将其添加到日期数组中,然后减去numpy.timedelta64(1,’D’)以返回上个月的最后一天.
使用apply(lambda)的解决方案可能要慢得多.正如警告所说,一些Pandas日期偏移操作没有矢量化.如果您的数据很大,最好避免使用它们.像busday_offset()和timedelta64这样的NumPy工具是完全高效的.
内容总结
以上是互联网集市为您收集整理的python – 使用不同偏移向量的Pandas矢量化日期偏移操作全部内容,希望文章能够帮你解决python – 使用不同偏移向量的Pandas矢量化日期偏移操作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。