gpt4 book ai didi

python - pandas:将日期时间转换为月末

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

我已经编写了一个函数来将 pandas 日期时间日期转换为月末:

import pandas
import numpy
import datetime
from pandas.tseries.offsets import Day, MonthEnd

def get_month_end(d):
month_end = d - Day() + MonthEnd()
if month_end.month == d.month:
return month_end # 31/March + MonthEnd() returns 30/April
else:
print "Something went wrong while converting dates to EOM: " + d + " was converted to " + month_end
raise

这个功能似乎很慢,我想知道是否有更快的替代方案?我注意到它很慢的原因是我在具有 50'000 个日期的数据框列上运行它,并且我可以看到自从引入该函数以来代码要慢得多(在我将日期转换为月末之前)。

df = pandas.read_csv(inpath, na_values = nas, converters = {open_date: read_as_date})
df[open_date] = df[open_date].apply(get_month_end)

我不确定这是否相关,但我正在阅读以下日期:

def read_as_date(x):
return datetime.datetime.strptime(x, fmt)

最佳答案

修改后,转换为句点,然后返回时间戳就可以了

In [104]: df = DataFrame(dict(date = [Timestamp('20130101'),Timestamp('20130131'),Timestamp('20130331'),Timestamp('20130330')],value=randn(4))).set_index('date')

In [105]: df
Out[105]:
value
date
2013-01-01 -0.346980
2013-01-31 1.954909
2013-03-31 -0.505037
2013-03-30 2.545073

In [106]: df.index = df.index.to_period('M').to_timestamp('M')

In [107]: df
Out[107]:
value
2013-01-31 -0.346980
2013-01-31 1.954909
2013-03-31 -0.505037
2013-03-31 2.545073

请注意,这种类型的转换也可以这样完成,不过上面会稍微快一些。

In [85]: df.index + pd.offsets.MonthEnd(0) 
Out[85]: DatetimeIndex(['2013-01-31', '2013-01-31', '2013-03-31', '2013-03-31'], dtype='datetime64[ns]', name=u'date', freq=None, tz=None)

关于python - pandas:将日期时间转换为月末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233107/

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