【问题标题】:How to fill the missing date values in data frame by generating the range of dates between two time periods如何通过生成两个时间段之间的日期范围来填充数据框中缺失的日期值
【发布时间】:2019-08-27 16:31:46
【问题描述】:

我有一个数据框,其中缺少日期列的几个日期值,并且存在所有其他数据值。我必须填写日期值。日期值必须介于这两个值之间。例如,填写 1988 年 13 月 12 日至 2012 年 1 月 20 日之间的缺失日期。

请帮帮我。

非常感谢, 阿尼克特·帕特尔

【问题讨论】:

    标签: python data-science


    【解决方案1】:

    您可以使用 datetime.timedelta 函数来获取时间偏移量。这可用于生成从时间a 到时间b 的每个日期。

    a = datetime.datetime(1988, 12, 13)
    b = datetime.datetime(2012, 1, 20)
    
    # get all date between a and b
    date_list = [a + datetime.timedelta(days=x) for x in range((b - a).days)]
    
    # format dates for pretty printing
    date_str_list = ['{}/{}/{}'.format(d.year, d.month, d.day) for d in date_list]
    
    # print first five dates
    print(date_str_list[:5])
    

    【讨论】:

    • 您好,感谢您的快速回复。我的数据框中缺少 37 个日期值。我已经使用函数生成了日期..... def random_dates(start, end, n=37): start_u = start.value//109 end_u = end.value//109 return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s') .. 我必须将这些值填充到数据框中的缺失值中。热心帮助。
    【解决方案2】:

    将您的日期转换为自纪元以来的时间增量(以秒为单位)。为本系列调用 pandas interpolate 函数。如果您想要日期表示,请转换回来

    df = pd.DataFrame(dict(date = pd.date_range('20130101',periods=10)))
    df.iloc[5]['date'] = ''
    
            date
    0 2013-01-01
    1 2013-01-02
    2 2013-01-03
    3 2013-01-04
    4 2013-01-05
    5        NaT
    6 2013-01-07
    7 2013-01-08
    8 2013-01-09
    9 2013-01-10
    
    in_sec = pd.to_timedelta(df['date'], unit='second') / np.timedelta64(1, 's')
    
    result = in_sec.interpolate()
    
    result = pd.to_datetime(result ,unit='s')
    
    0   2013-01-01
    1   2013-01-02
    2   2013-01-03
    3   2013-01-04
    4   2013-01-05
    5   2013-01-06
    6   2013-01-07
    7   2013-01-08
    8   2013-01-09
    9   2013-01-10
    

    【讨论】:

    • 嗨拉贾,感谢您的快速回复。我的数据框中缺少 37 个日期值。我已经使用函数生成了日期..... def random_dates(start, end, n=37): start_u = start.value//109 end_u = end.value//109 return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s') .. 我必须将这些值填充到数据框中的缺失值中。热心帮助。
    • 这些值没有丢失。他们错了。正确的?所以你必须先找到它们,删除它们,然后再进行插值。找到它们取决于它们的错误程度。但是你应该在你的问题中澄清这一点。因为现在这是一个不同的问题。在日期时间左右找到错误的值...
    猜你喜欢
    • 2021-09-18
    • 2019-07-20
    • 2021-08-15
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多