1

I have a snippet of code that extracts year, month, week from a date. Year and month works but year-month and week both returns error like the one below:

AttributeError: 'datetime.datetime' object has no attribute 'week'

I imported the library like this:

import datetime

and called on the dt column using col.dt.year, col.dt.month, col.dt.to_period('M'),col.dt.week.

The first 2 works and last 2 doesn't. After searching similar questions I still couldn't get it run. I'm on pandas '0.23.4'. Thanks for any help.

santoku
  • 3,297
  • 7
  • 48
  • 76
  • You need to provide code. Without it, we can only say you are referencing `col.dt` as `datetime.datetime` as the error says. – Ricky Kim Jan 10 '19 at 04:05
  • I realized the issue is that it's a vDDDtype rather than date time, which comes with some known issues in extracting time intervals and the code requires reading ical. I tried to combine the ymd into a proper dt object df['dt']=pd.to_datetime(dict(year=df['Year'], month=df['Month'], day=df['Day'])) and then run df['dt'].dt.week() but it's now returning TypeError: 'Series' object is not callable – santoku Jan 10 '19 at 04:30
  • 1
    try `df['dt'].dt.week` instead of `df['dt'].dt.week()` – Ricky Kim Jan 10 '19 at 04:33
  • that worked! thanks. – santoku Jan 10 '19 at 04:42

1 Answers1

1

Per How to get week number in Python?:

>>> import datetime
>>> datetime.date(2010, 6, 16).isocalendar()[1]
24

Adapted to your code (assuming col.dt is a datetime),

col.dt.isocalendar()[1]
dtanabe
  • 1,611
  • 9
  • 18
  • pretty sure `col.dt` is [pandas.Series.dt](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html) – Ricky Kim Jan 10 '19 at 04:04
  • I think you're right; if `pandas.Series.dt` simply defers to `datetime.datetime` under the hood, then `isocalendar()` would still work; otherwise I guess an explicit `to_pydatetime()` call would be required... – dtanabe Jan 10 '19 at 04:12