最终,我想计算df['start']
中每个日期的当月最后一天的天数,并在'count'
列中填入结果。
作为实现这一目标的第一步calendar.monthrange
方法获取(年,月)参数并返回(第一个工作日,天数)元组。
将函数应用于数据框或系列对象似乎存在一般错误。我想明白,为什么这不起作用。
import numpy as np
import pandas as pd
import calendar
def last_day(row):
return calendar.monthrange(row['start'].dt.year, row['start'].dt.month)
这一行引发了一个AttributeError:“Timestamp对象没有属性'dt'”:
df['count'] = df.apply(last_day, axis=1)
这就是我的数据框架:
start count
0 2016-02-15 NaN
1 2016-02-20 NaN
2 2016-04-23 NaN
df.dtypes
start datetime64[ns]
count float64
dtype: object
答案 0 :(得分:1)
删除.dt
。访问某种矢量时通常需要这样做。但是当访问单个元素时,它已经是datetime
对象:
def last_day(row):
return calendar.monthrange(row['start'].year, row['start'].month)
此apply
调用last_day
并传递一个系列。
df['count'] = df.apply(last_day, axis=1)
在last_day
中,您可以选择系列中的单个元素:
row['start'].year
答案 1 :(得分:0)
我会这样做:
from pandas.tseries.offsets import MonthEnd
## sample data
d = pd.DataFrame({'start':['2016-02-15','2016-02-20','2016-04-23']})
## solution
d['start'] = pd.to_datetime(d['start'])
d['end'] = d['start'] + MonthEnd(1)
d['count'] = (d['start'] - d['end']) / np.timedelta64(-1, 'D')