python - 基于时间片在for循环中创建新数组
问题描述
我有一个网格数据集,其中纬度、经度、时间和温度是变量。我想看看基于十年数据的一些分布。例如,假设我想查看上海和新加坡的某个位置。
shanghai = temp.sel(latitude=31.25, longitude=121.5)
singapore = temp.sel(latitude=1.25, longitude=103.75)
现在我设置开始和结束日期。
start_date1 = dt.datetime(1990,1,1)
end_date1 = dt.datetime(1999,12,31)
现在我想创建一个循环,这样我就不必在切片两个温度数组时进行硬编码。理想情况下,从 for 循环中吐出的是两个新数组,其中包含 1990 年代的数据,其名称类似于原始变量shanghai
+ 90s
to create shanghai90s
。这就是我所拥有的。
names = [shanghai, singapore]
for i in range(len(names)):
nine=names[i].sel(time=(slice(start_date1,end_date1)))
但是,这只会创建一个带有最后一个变量的新数组(在本例中为新加坡)。我将如何解决这个问题?
解决方案
将所有城市数据保存在字典中会更好,但一种快速的方法是更新数组以仅包含您想要的日期:
names = [shanghai, singapore]
for city in names:
city=city.sel(time=(slice(start_date1,end_date1)))
字典方法会让你预先做一些工作来设置坐标和几十年,然后让你遍历所有城市和几十年来构建你想要的所有数据的字典。它看起来像这样:
import datetime as dt
cities = {
"Shangai": {"coords": [31.25, 121.5]},
"Singapore": {"coords": [1.25, 103.75]},
"Other City": {"coords": [15.25, 85.25]}
}
decades = {
"1990s": {"start": dt.datetime(1990,1,1), "end": dt.datetime(1999,12,31)},
"2000s": {"start": dt.datetime(2000,1,1), "end": dt.datetime(2009,12,31)},
"2010s": {"start": dt.datetime(2010,1,1), "end": dt.datetime(2019,12,31)}
}
for city, location in cities.items():
data = temp.sel(latitude=location['coords'][0], longitude=location['coords'][1])
for decade, dates in decades.items():
cities[city][decade] = data.sel(time=(slice(dates['start'], dates['end'])))
然后你可以像这样访问上海的 90 年代数据:
cities["Shangai"]["1990s"]
如果您熟悉字典和列表等基本数据结构,那真的会让您的生活更轻松。有很多很棒的教程。我建议将其用于字典,将其用于列表。
此外,为了跟上本网站的精神,在您提问时提供 MWE 是一种很好的礼仪。这是如何做到的。
推荐阅读
- php - Phpmailer 错误:无法验证
- c - 如何在树莓派上控制 SPIDEV 模块中的 CS 信号
- pygame - Pygame:创建子弹 - 'Bullet' 对象不可调用
- c# - 在 UWP(C#) 中,有没有办法调用其他窗口?
- java - 如何在 Firebase 中获取多个图像的 URL
- e-commerce - 自定义模板订单确认页面
- ruby-on-rails - 如何从 rails helper 内容标签显示有组织的数据
- ruby-on-rails - 关系模型未按预期工作
- ruby - 使用实例变量与“attr_reader”之间的区别
- c# - 新的空 asp.net 核心项目无法运行(错误 502.5)