在迭代列以进行API请求时出现类型错误。

huangapple go评论154阅读模式
英文:

Getting type error while iterating through columns to make API request

问题

我有一个来自Kaggle的数据集(https://www.kaggle.com/datasets/michaelbryantds/tornadoes/),在这个数据集中,我正在迭代四列(日期、纬度、经度、时间)以从这个API(https://www.visualcrossing.com/resources/documentation/weather-api/timeline-weather-api/)进行API请求。我已经抽取了250个龙卷风的加权样本(以便不超过每天1000个请求的限制)。

目标是使用这三个数据点将温度、湿度和气压数据附加到每个龙卷风。

我遇到的问题是,当我尝试创建一个简单的“for”循环来循环遍历并打印响应时,我收到以下错误消息:

TypeError: 'float' object is not subscriptable

在我尝试编写将其附加到DF的部分之前。有人可以指点我正确的方向吗?

  1. df = Sample_df
  2. Sample_df.slat.astype('float')
  3. Sample_df.slon.astype('float')
  4. for (tornado, lon) in df.iterrows():
  5. date = lon['date']
  6. lat = lon['slat']
  7. lon = lon['slon']
  8. t = lon['time']
  9. apikey = 'MY_API_KEY'
  10. url = "https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/{},{}/{}T{}?key={}".format(lat, lon, date, t, apikey)
  11. response = requests.get(url)
  12. response_dict = response.json()
  13. print(response_dict)

希望这可以帮助你解决问题。

英文:

I have a dataset from Kaggle (https://www.kaggle.com/datasets/michaelbryantds/tornadoes/) where I am iterating through four columns (date, slat, slon, time) to make an API request from this API https://www.visualcrossing.com/resources/documentation/weather-api/timeline-weather-api/. I have drawn a weighted sample of 250 tornadoes (so I won't surpass the 1000 request/day limit).

The goal is to use those three datapoints to append the temperature, humidity, and pressure data to each tornado.

The problem I am having is I am getting

> TypeError: 'float' object is not subscriptable

when I try to make a simple "for" loop to cycle through and print the responses before I even try to code in the portion to append it to the DF. Can someone point me in the right direction here?

  1. df = Sample_df
  2. Sample_df.slat.astype('float')
  3. Sample_df.slon.astype('float')
  4. for (tornado,lon) in df.iterrows():
  5. date = lon['date']
  6. lat = lon['slat']
  7. lon = lon['slon']
  8. t = lon['time']
  9. apikey = 'MY_API_KEY'
  10. url = "https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/{},{}/{}T{}?key={}".format(lat,lon,date,time,apikey)
  11. response = requests.get(url)
  12. response_dict = response.json()
  13. print(response_dict)

答案1

得分: 1

lon在循环中被重新定义为浮点数lon = lon['slon']。请选择另一个名称用于此变量。

此外,time未定义,但 t已定义。

英文:

You have redefined lon in cycle to a float lon = lon['slon'].
Choose another name for this variable.

Also time is not defined, but t is.

答案2

得分: 0

您的问题是在提取所有数据之前重新分配了变量 lon

  1. for (tornado,lon) in df.iterrows():
  2. date = lon['date']
  3. lat = lon['slat']
  4. lon = lon['slon'] # 用浮点值覆盖了变量 lon
  5. t = lon['time'] # 尝试访问 lon 的旧值

您可以通过为变量指定不同的名称来解决此问题:

  1. for (tornado,data) in df.iterrows():
  2. date = data['date']
  3. lat = data['slat']
  4. lon = data['slon']
  5. t = data['time']
英文:

Your issue that you've used reassigned the variable lon before you finished extracting all the data:

  1. for (tornado,lon) in df.iterrows():
  2. date = lon['date']
  3. lat = lon['slat']
  4. lon = lon['slon'] # Overwrites the variable lon with a float value
  5. t = lon['time'] # Attempts to access the old value of lon

You can fix this by giving the variable a different name:

  1. for (tornado,data) in df.iterrows():
  2. date = data['date']
  3. lat = data['slat']
  4. lon = data['slon']
  5. t = data['time']

huangapple
  • 本文由 发表于 2023年8月11日 03:06:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/76878678.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定