2016-07-26 5 views
4

年のISO週が続きます(何年にも53週があります。年)。 pandas.to_datetime()を使用してdatetimeオブジェクトに変換します。Pandasを使用してstringをdatetimeにフォーマットする - ディレクティブに問題がある

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

をし、それが返されます:だから私はやる権利ではありません

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

を。それとも私がしようとした場合:それは%Vが悪いディレクティブであることを私に伝えます

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

私は間違っていますか?これは私が進行する方法です、その質問に提供する機能を使用してReversing date.isocalender()

+1

私は、これはバグかもしれないと思うに。 [github](https://github.com/pydata/pandas/issues/)の報告に値するhttps://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior prehapsそれは[this one](https://github.com/pydata/pandas/issues/10315)ですが、私はそれが違うと思います) –

答えて

2

私は、次の質問は、あなたに有用であろうと考えて自分の価値観のためにその機能を実行し

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 

とそれをデータフレームに日付時間オブジェクトとして追加します。

私はあなたの指定した文字列から得られた結果:

2011-11-07 
+0

文字通り、最初の4文字と最後の2文字に文字列を解析することについて冗談を言っていました私がこれを理解できなければ。実際に答えが出ていることが分かります。ありがとう! – user1566200

+0

だから私は非常に大規模なDataFrameでこれを試してみましたが、それは非常に遅いです - 約60k行は約3分かかります: 'time_convert_func = lambda x:iso_to_gregorian(time_stamp(x)[0]、time_stamp(x)[1]、time_stamp x)[2]) '続いて' result = df ['startdate']。 – user1566200

関連する問題