在Python中舍入到最接近的日期

时间:2018-07-09 15:09:07

标签: python pandas

因此,我已经从SQL下载了一个表,现在正在对其执行操作。其中两列是Start_Date和Maturity_Date,我想将它们减去两个,然后再将它们除以另一列。我想出了如何使用以下代码减去它们:

df['START_DATE']=pd.to_datetime(df['START_DATE'])
df['MATURITY_DATE']=pd.to_datetime(df['MATURITY_DATE'])

df['c']=df['MATURITY_DATE']-df['START_DATE']
df['d']=df['c'].div(df['TERM'], axis=0)

但是,当我将日期时间中的'c'除以int形式的'Term'时,我的新df ['d']看起来像是“ 60天4:00:00”。我不希望它是日期,但我希望将df ['d']舍入到最接近的整数,并且我希望能够对它执行操作,就好像它是整数一样。本质上,如何将df ['d']转换为最接近的整数?

1 个答案:

答案 0 :(得分:1)

您可以使用pandas.Series.dt.round,指定您希望它最近的一天。

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')

如果您需要数字而不是时间增量,请使用numpy进行转换:

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')/np.timedelta64(1, 'D')

样本数据

import pandas as pd
import numpy as np

df = pd.DataFrame({'START_DATE': [pd.to_datetime('2017-01-01'), pd.to_datetime('2017-01-01')],
                  'MATURITY_DATE': [pd.to_datetime('2017-01-06 11:00:00'), pd.to_datetime('2017-01-06 13:00:00')],
                  'TERM': [3,2]})

#  START_DATE       MATURITY_DATE  TERM
#0 2017-01-01 2017-01-06 11:00:00     3
#1 2017-01-01 2017-01-06 13:00:00     2

代码:

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')
#0   2 days
#1   3 days
#dtype: timedelta64[ns]

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')/np.timedelta64(1, 'D')
#0    2.0
#1    3.0
#dtype: float64