将pandas offset转换为python日期

时间:2017-05-11 11:42:08

标签: python pandas

Pandas在包pandas.tseries.frequency中有一个方便的方法to_offset,它将字符串转换为偏移量:

from pandas.tseries.frequencies import to_offset
_30_days_ago = to_offset("30D")

如何将偏移转换为:

  • Python日期,或
  • 格式为yyyy-mm-dd
  • 的字符串

特别是,我如何使用偏移来计算日期?例如,如果今天是2017-05-11,我该如何使用to_offset("10D")来获取日期2017-05-01

2 个答案:

答案 0 :(得分:4)

如果需要使用to_offset

from pandas.tseries.frequencies import to_offset

ts = pd.to_datetime('2017-05-11') - to_offset("10D")
print (ts)
2017-05-01 00:00:00

print (type(ts))
<class 'pandas._libs.tslib.Timestamp'>

对于字符串添加strftime

ts_str = ts.strftime('%Y-%m-%d')
print (ts_str)
2017-05-01
print (type(ts_str))
<class 'str'>

对于日期添加date()

ts_python_date = ts.date()
print (ts_python_date)
2017-05-01
print (type(ts_python_date))
<class 'datetime.date'>

另一种解决方案是使用Timedelta

print (pd.to_datetime('2017-05-11') - pd.Timedelta('10D'))
#same as
#print ((pd.to_datetime('2017-05-11') - pd.to_timedelta('10D')))
2017-05-01 00:00:00

答案 1 :(得分:2)

In [149]: pd.datetime.today() - pd.DateOffset(days=10)
Out[149]: Timestamp('2017-05-01 13:44:38.082351')

你也可以截断时间:

In [154]: (pd.datetime.today() - pd.DateOffset(days=10)).normalize()
Out[154]: Timestamp('2017-05-01 00:00:00')