首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在创建循环以填充数据格式时获取KeyError

在创建循环以填充数据格式时获取KeyError
EN

Stack Overflow用户
提问于 2019-06-09 19:19:12
回答 1查看 274关注 0票数 0

因此,我正在使用Darksky将历史天气数据存储到数据中。但是,当我试图用数据加载数据时,我会得到一个KeyError。

我是如何做到这一点的,它使用的是一个for循环,它每小时运行一次,收集所有每小时的数据。因此,当您查询API时,会得到如下输出:

输出数据

天气“每小时”

{“摘要”:“早上开始多云。”,“图标”:“部分多云-天”,数据“:[{ {

  • “时间”:1528354800,
  • 摘要:“部分多云”,
  • “图标”:“部分-多云之夜”,
  • “沉淀强度”:0,
  • “沉淀可能性”:0,
  • “温度”:12.94,
  • “显圣温度”:12.94,
  • “露点”:9.36,
  • 湿度: 0.79,
  • “压力”:1011.4,
  • “风速”:2.2,
  • “风笛”:2.69,
  • “风车”:252,
  • ‘cloudCover: 0.33
  • “‘uvIndex”:0,
  • “能见度”:13.81}}

此数据将显示给定一天的每个小时,或者循环显示的天数范围。所以首先我创建了我的数据,如下所示:

Dataframe创建

daily_weather = pd.DataFrame(

  • {“时间”:[]
  • “实时”:[],
  • “摘要”:[],
  • “图标”:[]
  • “沉淀强度”:[],
  • “沉淀可能性”:[],
  • “温度”:[],
  • “显圣温度”:[],
  • “露点”:[],
  • “湿度”:[],
  • “压力”:[],
  • ‘风速’:[],
  • “风笛”:[],
  • “风声”:[],
  • “云端”:[]
  • “‘uvIndex”:[]
  • “能见度”:[]}

然后,我使用一个循环来调用API,并在一段时间内加载数据以填充数据:

填充DataFrame:

日(1,30):

代码语言:javascript
运行
复制
dt = datetime(2018, 6, day).isoformat()

weather = forecast('d783b2b300466c9bd421eb89ebbd2eca', *VICTORIA, time = dt)

weather.refresh(units='si')

for hour in weather['hourly']['data']:

    daily_weather = daily_weather.append(

    {'time': hour['time'],
     'realtime': datetime.fromtimestamp(hour['time']),
     'summary': hour['summary'],
     'icon': hour['icon'],
     'precipIntensity': hour['precipIntensity'],
     'precipProbability': hour['precipProbability'],
     'temperature': hour['temperature'],
     'apparentTemperature': hour['apparentTemperature'],
     'dewPoint': hour['dewPoint'],
     'humidity': hour['humidity'],
     'pressure': hour['pressure'],
     'windSpeed': hour['windSpeed'],
     'windGust': hour['windGust'],
     'windBearing': hour['windBearing'],
     'cloudCover': hour['cloudCover'],
     'uvIndex': hour['uvIndex'],
     'visibility': hour['visibility'],
     }, ignore_index=True)

如果我只包含前几个参数,代码就能工作,但是在使用所有内容时都会出现错误:

KeyError

我想要任何方向。我很困惑。

EN

回答 1

Stack Overflow用户

发布于 2019-06-23 07:26:02

看看他们的文件,它说precipIntensity和许多其他值一样是可选的。若要防止发生类似的错误,请使用hour.get('precipIntensity, 0)默认为0,但如果需要,也可以默认为None

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56720853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档