簡體   English   中英

如何從python中的日期字符串生成范圍日期?

[英]how to generate range date from date string in python?

我的日期格式如下圖:

    {
      "amount": 599400,
      "date_cart_closed": "2015-03"
    },
    {
      "amount": 575856,
      "date_cart_closed": "2015-01"
    },
    {
      "amount": 2216490,
      "date_cart_closed": "2015-05"
    }

這里我們有2015-03這樣的格式。 基本日期是固定的,從2011-01-01開始,直到用戶在UNIX_TIMESTAMP輸入日期(如1343287040

現在的問題是我有開始日期和結束日期。 在這個范圍內,我必須填補空白。 說得簡單,我沒有2011-012011-022015-03等。如何填補這些差距? 有沒有辦法處理這種情況?


編輯1:
pandas似乎根據月份創建了范圍日期。 我為生成月份做了以下工作:

pandas.date_range(start='20140101', end='20140501', freq='M')

其輸出如下:

DatetimeIndex(['2014-01-31', '2014-02-28', '2014-03-31', '2014-04-30'], dtype='datetime64[ns]', freq='M', tz=None)

它以某種方式解決了我的問題,但是我需要像2014-01而不是2014-01-01這樣的輸出。 有格式化輸出的方法嗎?

這是單線。 您可以使用numpy.astype('<M8[M]')將日期時間對象轉換為每月頻率,然后使用.astype(str)獲取Unicode字符串。 此操作是矢量化的,對於大型數據集來說非常快。

import pandas as pd
import numpy as np

# sample datetime index
# ================================
ts_index = pd.date_range(start='20140101', end='20140501', freq='M')
ts_index

DatetimeIndex(['2014-01-31', '2014-02-28', '2014-03-31', '2014-04-30'], dtype='datetime64[ns]', freq='M', tz=None)

# processing
# ===================================
ts_index.values.astype('<M8[M]').astype(str)

array(['2014-01', '2014-02', '2014-03', '2014-04'], 
      dtype='<U25')

將日期轉換為整數,以自0年以來的月數為單位:

def yearmonth_to_ordinal(date_string):
    year, month = map(int, date_string.split('-'))
    return year * 12 + (month - 1)

因此2015-01變為24180,2015-03變為24182,依此類推。您現在可以在序數上創建范圍。

要返回日期字符串,請使用模塊化算法:

def ordinal_to_yearmonth(ordinal):
    year, month = divmod(ordinal, 12)
    return '{:04d}-{:02d}'.format(year, month + 1)

演示:

>>> yearmonth_to_ordinal('2015-05')
24184
>>> ordinal_to_yearmonth(yearmonth_to_ordinal('2015-05') + 7)
'2015-12'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM