Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Formatting string into datetime using Pandas - trouble with directives

I have a string that is the full year followed by the ISO week of the year (so some years have 53 weeks, because the week counting starts at the first full week of the year). I want to convert it to a datetime object using pandas.to_datetime(). So I do:

pandas.to_datetime('201145', format='%Y%W')

and it returns:

Timestamp('2011-01-01 00:00:00')

which is not right. Or if I try:

pandas.to_datetime('201145', format='%Y%V')

it tells me that %V is a bad directive.

What am I doing wrong?

like image 497
user1566200 Avatar asked Oct 29 '22 23:10

user1566200


1 Answers

I think that the following question would be useful to you: Reversing date.isocalender()

Using the functions provided in that question this is how I would proceed:

import datetime
import pandas as pd
def iso_year_start(iso_year):
    "The gregorian calendar date of the first day of the given ISO year"
    fourth_jan = datetime.date(iso_year, 1, 4)
    delta = datetime.timedelta(fourth_jan.isoweekday()-1)
    return fourth_jan - delta 

def iso_to_gregorian(iso_year, iso_week, iso_day):
    "Gregorian calendar date for the given ISO year, week and day"
    year_start = iso_year_start(iso_year)
    return year_start + datetime.timedelta(days=iso_day-1, weeks=iso_week-1)

def time_stamp(yourString):
    year = int(yourString[0:4])
    week = int(yourString[-2:])
    day = 1
    return year, week, day

yourTimeStamp = iso_to_gregorian( time_stamp('201145')[0] , time_stamp('201145')[1], time_stamp('201145')[2] )

print yourTimeStamp

Then run that function for your values and append them as date time objects to the dataframe.

The result I got from your specified string was:

2011-11-07
like image 91
sTr8_Struggin Avatar answered Nov 15 '22 07:11

sTr8_Struggin