【问题标题】:How to do for loop in xarray python and create multi dataset with different days?如何在xarray python中进行for循环并创建不同日期的多数据集?
【发布时间】:2021-02-27 15:20:08
【问题描述】:

我有不同日期的时间戳列表(day_of_tuple_3Days),我想选择前 7 天和 7 天后的每一天来创建每个案例的数据集,我该怎么做? 我的可能是:

from datetime import date, timedelta
n = 0

current_date = day_of_tuple_3Days[n].isoformat()   
days_before = (day_of_tuple_3Days[n]-timedelta(days=7)).isoformat()
days_after = (day_of_tuple_3Days[n]+timedelta(days=7)).isoformat()  

case = study_area.sel(time = slice(days_before,days_after))

day_of_tuple_3Days 在哪里:

[Timestamp('2000-07-15 00:00:00'),
 Timestamp('2000-08-02 00:00:00'),
 Timestamp('2002-07-20 00:00:00'),
 Timestamp('2003-08-10 00:00:00'),
 Timestamp('2007-07-30 00:00:00'),
 Timestamp('2010-07-13 00:00:00'),
 Timestamp('2010-08-13 00:00:00'),
 Timestamp('2011-08-02 00:00:00'),
 Timestamp('2012-07-24 00:00:00'),
 Timestamp('2015-08-01 00:00:00'),
 Timestamp('2016-07-22 00:00:00'),
 Timestamp('2017-07-05 00:00:00'),
 Timestamp('2017-07-18 00:00:00'),
 Timestamp('2017-07-23 00:00:00'),
 Timestamp('2017-08-09 00:00:00'),
 Timestamp('2018-07-04 00:00:00'),
 Timestamp('2018-07-10 00:00:00'),
 Timestamp('2019-06-26 00:00:00'),
 Timestamp('2019-08-01 00:00:00')]

我希望: 案例0 情况1 案例2 到目前为止

【问题讨论】:

    标签: python datetime for-loop dataset python-xarray


    【解决方案1】:

    您可以将Timestamps 列表转换为字符串列表,然后执行以下操作:

    from datetime import date, timedelta, datetime
    from pandas import DataFrame
    
    times = ['2000-07-15 00:00:00',
             '2000-08-02 00:00:00',
             '2002-07-20 00:00:00',
             '2003-08-10 00:00:00',
             '2007-07-30 00:00:00',
             '2010-07-13 00:00:00',
             '2010-08-13 00:00:00',
             '2011-08-02 00:00:00',
             '2012-07-24 00:00:00',
             '2015-08-01 00:00:00',
             '2016-07-22 00:00:00',
             '2017-07-05 00:00:00',
             '2017-07-18 00:00:00',
             '2017-07-23 00:00:00',
             '2017-08-09 00:00:00',
             '2018-07-04 00:00:00',
             '2018-07-10 00:00:00',
             '2019-06-26 00:00:00',
             '2019-08-01 00:00:00']
    
    results = dict()
    days = timedelta(7)
    for i, t in enumerate(times, 1):
        y, m, d = map(int, t[:10].split('-'))
        da = date(y, m, d)
        before = da - days
        after = da + days
        results[f'case{i}'] = [f'{before} to {da}', f'{da} to {after}']
    
    print(results)
    

    输出:

    {'case1': ['2000-07-08 to 2000-07-15', '2000-07-15 to 2000-07-22'],
     'case2': ['2000-07-26 to 2000-08-02', '2000-08-02 to 2000-08-09'],
     'case3': ['2002-07-13 to 2002-07-20', '2002-07-20 to 2002-07-27'],
     'case4': ['2003-08-03 to 2003-08-10', '2003-08-10 to 2003-08-17'],
     'case5': ['2007-07-23 to 2007-07-30', '2007-07-30 to 2007-08-06'],
     'case6': ['2010-07-06 to 2010-07-13', '2010-07-13 to 2010-07-20'],
     'case7': ['2010-08-06 to 2010-08-13', '2010-08-13 to 2010-08-20'],
     'case8': ['2011-07-26 to 2011-08-02', '2011-08-02 to 2011-08-09'],
     'case9': ['2012-07-17 to 2012-07-24', '2012-07-24 to 2012-07-31'],
     'case10': ['2015-07-25 to 2015-08-01', '2015-08-01 to 2015-08-08'],
     'case11': ['2016-07-15 to 2016-07-22', '2016-07-22 to 2016-07-29'],
     'case12': ['2017-06-28 to 2017-07-05', '2017-07-05 to 2017-07-12'],
     'case13': ['2017-07-11 to 2017-07-18', '2017-07-18 to 2017-07-25'],
     'case14': ['2017-07-16 to 2017-07-23', '2017-07-23 to 2017-07-30'],
     'case15': ['2017-08-02 to 2017-08-09', '2017-08-09 to 2017-08-16'],
     'case16': ['2018-06-27 to 2018-07-04', '2018-07-04 to 2018-07-11'],
     'case17': ['2018-07-03 to 2018-07-10', '2018-07-10 to 2018-07-17'],
     'case18': ['2019-06-19 to 2019-06-26', '2019-06-26 to 2019-07-03'],
     'case19': ['2019-07-25 to 2019-08-01', '2019-08-01 to 2019-08-08']}
    

    【讨论】:

    • 这个解决方案的答案 this 1564610400.0 !!
    • @hasanainkhail 你能澄清你的问题吗? Timestamp() 类是什么?请提供可以正常运行的代码。
    • 列表 (day_of_tuple_3Days) 是单天。对于每一天,我必须从日历中选择之前的 -7 天和之后的 +7,例如列表中的第一天是 2000-07-15,因此期间应该选择的是 2000-07-07 到 2000-07-15 和从 2000-07-15 到 2000-07-21 ,这是由 timedelta 完成的,我该怎么做 for 循环来选择列表中的每一天然后从日历中选择前后天数,并制作每个连续天数数据数组,例如case1,case2,case3 ....
    • @hasanainkhalil 我的编辑是你想要做的吗?
    猜你喜欢
    • 2018-09-15
    • 2019-01-31
    • 2023-01-30
    • 2021-08-01
    • 1970-01-01
    • 2017-01-28
    • 2022-01-18
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多