【问题标题】:API JSON Response- replicating python pandas dataframe code into RAPI JSON 响应 - 将 python pandas 数据帧代码复制到 R
【发布时间】:2022-01-17 20:14:23
【问题描述】:

我正在尝试使用这个 API:https://docs.oikolab.com/#2-1-request

而且他们提供了大量的文档。我设法从 API 中获取了我想要的数据,但似乎无法弄清楚如何将其转换为 R 数据框。该页面提供了一个示例以及如何在 Python 中转换为 pandas 数据框,但我似乎无法在 R 中获得相同的解决方案。

我尝试过 fromJSON(),但我认为由于数据的结构方式,这会导致一些问题。

这是他们在网站上给出的例子,我的问题是如何在 R 中做同样的事情?

来自 API 的响应如下所示:

{'attributes': {
                'processing_time': 1.527,
                'n_parameter_months': 851, 
                'gfs_reference_time': '2021-05-17 12 UTC', 
                'next_gfs_update': 'in 2.0 hours (approx)', 
                 },
  'data': '{"columns": ["temperature (degC)","wind_speed (m/s)"],
                       "index":[1262304000,1262307600,... ],
                       "data":[[16.59,7.61],[16.44,7.79]...]
          }'
}

该网站说对于 Python 和 Pandas,转换为这样的数据框:

import json
import pandas as pd

weather_data = json.loads(r.json()['data'])
df = pd.DataFrame(index=pd.to_datetime(weather_data['index'], 
                                       unit='s'),
                  data=weather_data['data'],
                  columns=weather_data['columns'])

那么,您将如何在 R 中复制这段代码的结果?

谢谢!

【问题讨论】:

  • 发布fromJSON 对象的str()。您可能会看到嵌入的数据框。
  • edit您的帖子并逐字包含所有错误。此外,链接中发布的 JSON 不是有效的 JSON。如果 R 出现语法问题,例如单引号使用无效字符,请联系作者。

标签: r json dataframe api


【解决方案1】:

如评论所述,如果您使用str() 查看对象的结构,您可以识别要提取的元素。下面使用 json sn-p (修正双引号):

library(jsonlite)

json_data = '{"attributes": {
  "processing_time": 1.527,
  "n_parameter_months": 851, 
  "gfs_reference_time": "2021-05-17 12 UTC", 
  "next_gfs_update": "in 2.0 hours (approx)" 
},
  "data": {"columns": ["temperature (degC)","wind_speed (m/s)"],
    "index":[1262304000, 1262307600],
    "data": [[16.59,7.61], [16.44,7.79]]
  }
}'

weather_data_obj <- fromJSON(txt = json_data)

str(weather_data_obj)
# List of 2
#  $ attributes:List of 4
#   ..$ processing_time   : num 1.53
#   ..$ n_parameter_months: int 851
#   ..$ gfs_reference_time: chr "2021-05-17 12 UTC"
#   ..$ next_gfs_update   : chr "in 2.0 hours (approx)"
#  $ data      :List of 3
#   ..$ columns: chr [1:2] "temperature (degC)" "wind_speed (m/s)"
#   ..$ index  : int [1:2] 1262304000 1262307600
#   ..$ data   : num [1:2, 1:2] 16.59 16.44 7.61 7.79

然后,使用类似于 pandas 的 data.frame 构造函数构建一个数据框:

weather_data_df <- data.frame(
  index = as.POSIXct(weather_data$data$index, origin = "1970-01-01"),
  `colnames<-`(weather_data$data$data, weather_data$data$columns),
  check.names = FALSE
)
  
weather_data_df
#                 index temperature (degC) wind_speed (m/s)
# 1 2009-12-31 18:00:00              16.59             7.61
# 2 2009-12-31 19:00:00              16.44             7.79

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2021-09-26
    • 1970-01-01
    • 2023-01-20
    • 2019-08-09
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多