我有一个数据框df,有两列如下-
START_DATE MONTHS
0 2015-03-21 240
1 2015-03-21 240
2 2015-03-21 240
3 2015-03-21 240
4 2015-03-21 240
5 2015-01-01 120
6 2017-01-01 240
7 NaN NaN
8 NaN NaN
9 NaN NaN
这两列的数据类型是对象。
>>> df.dtypes
START_DATE object
MONTHS object
dtype: object
现在,我想通过添加df['START_DATE']&df['MONTHS']来创建一个新的列“Result”。所以,我已经做了以下工作-
from dateutil.relativedelta import relativedelta
df['START_DATE'] = pd.to_datetime(df['START_DATE'])
df['MONTHS'] = df['MONTHS'].astype(float)
df['offset'] = df['MONTHS'].apply(lambda x: relativedelta(months=x))
df['Result'] = df['START_DATE'] + df['offset']
这里,我得到以下错误-
TypeError: incompatible type [object] for a datetime/timedelta operation
注意:希望将df['Months']转换为int,但由于字段有空,因此无法工作。
你能给我指路吗?谢谢。
这是一种矢量化的方法,所以应该非常有表现力。请注意,它不处理月交叉/结束(也不处理DST更改)。我相信这就是为什么你得到了《泰晤士报》。
如果您需要精确的MonthEnd/Begin处理,这是一种合适的方法。(使用MonthsOffset获得同一天)
这里有一种不需要
dateutil.relativedelta
的方法。请注意,我将MONTHS
转换为一个整数(并且仅在删除空值之后,因为int
不接受空值),因为我想每年进行12个月的整数除法,利用商是以年为单位的增量,模/余数是以月为单位的增量。如果数据帧很小,请使用以下命令。我使用了
axis=1
,这是行操作。如果你的数据帧很大,速度会很慢相关问题 更多 >
编程相关推荐