因此,我已经从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']转换为最接近的整数?
答案 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