0

YearMonthDayPythonのフォームで日付のリストを生成する方法はありますか? 2010 年 6 月 12 日から 2012 年 12 月 8 日までの毎週土曜日の日付をその形式で含むリストを作成する必要があります。

試しpandas.date_range('6/12/2010','12/8/2012', freq='W-SAT')ましたが、結果のタイムスタンプ オブジェクトを上記の形式に変換できませんでした。

4

4 に答える 4

2

pandas 0.8以降、この型は標準ライブラリTimestampの標準クラスをサブクラス化します。datetimeしたがって、を使用できますdatetime.strftime

>>> [ d.strftime('%Y%m%d') for d in pandas.date_range('6/12/2010','12/8/2012', freq='W-SAT') ]
['20100612',
 '20100619',
 '20100626',
 '20100703',
...
于 2012-12-10T16:06:47.610 に答える
0

書式設定を使用したいだけだと思います(パンダが必要だとは確信していませんが!-dateutilを参照するか、組み込みのdatetimeモジュールを利用してください)。

>>> dr = pandas.date_range('6/12/2010','12/8/2012', freq='W-SAT')
>>> ['{:%B %d %Y}'.format(d) for d in dr[:5]]
['June 12 2010', 'June 19 2010', 'June 26 2010', 'July 03 2010', 'July 10 2010']
>>> ['{:%Y%m%d}'.format(d) for d in dr[:5]]
['20100612', '20100619', '20100626', '20100703', '20100710']
于 2012-12-10T16:07:32.263 に答える
0

このようなものは、日付を取得するために機能するはずです(datetime標準ライブラリでのみ使用)。

from datetime import date,timedelta

def first_sat_after(d):
    for i in range(7):
        new_day = d.replace(day = d.day + i)
        if new_day.weekday() == 6:
            return new_day

def weekday_range(d1,dend):
    week = timedelta(days = 7)
    yield d1
    d2 = d1 + week
    while d2 <= dend:
        yield d2
        d2 = d2 + week

したがって、プログラムは次のようになります。

d1 = date(2010,6,12)
dend = date(2012,8,12)

date_strings = [ x.strftime('%Y%m%d') for x in weekday_range(first_sat_after(d1),dend) ]
于 2012-12-10T16:03:06.950 に答える
0

はい、日時ライブラリを取得し、それをオブジェクトとして使用して土曜日の最初を作成しdateます。次にtimedelta、7 日間のオブジェクトを作成し、それを最初のdateオブジェクトに追加します。最後の土曜日に到達するまで追加を続けます。

これらのオブジェクトから「年月日」形式の文字列を作成するに.strftime()は、オブジェクトのメソッドを使用するのが最も簡単です。

于 2012-12-10T16:00:17.740 に答える