微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于在 DataFrame 中进行分析的 F# 和 Web API Json

如何解决用于在 DataFrame 中进行分析的 F# 和 Web API Json

我试图通过从 python 重写一些脚本来学习 F#,在那里我查询一个 graphql 端点并将 json 加载到 Pandas DataFrame 中进行清理和分析:

json 像这样:

apiResponse = {"data":
                    {"Shipments":{"ErrorMessage":null,"Success":true,"ValidationResult":null,"TotalCount":494,"Data":[
                       {"Building":"B7","Comment":"Test","CompletedDate":"2021-04-12T10:13:13.436Z","ItemId":"dd4520bb-aa0a-...","NoOfUnit":5,"Organization":{
                              "OrganizationId":"cac43a32-1f08-...","OrganizationName":"XXX"},"Adress":"Road 5"
                      },{"Building":"B7",....}]}}}

蟒蛇:

data = request.json()
#only the "Data" path
json_list = data['data']['Shipments']['Data']
df = json_normalize(json_list)

使用 Fsharp.Data 的相同方法,而“file.json”只是“Data[]”部分(我试图创建一个小提琴,但我无法让它运行。here


type ApiTypes = JsonProvider<"file.json"> //where file.json has only "Data" path of apiResponse
let jsonResponse = JsonValue.Parse(apiResponse)
let data = jsonResponse?data
let Shipments = data?Shipments
let Data = Shipments?Data

let input = 
 ApiTypes.Parse(Data.ToString())

let df = Frame.ofRecords input

但这行不通。 所以我的问题:

  1. 这是处理这个 json 的正确方法吗?
  2. 是否有更好的方法来使用 json 创建 DataFrame?

感谢任何帮助。 谢谢

解决方法

我对 Deedle 没有任何经验,但我认为 ofRecords requires an actual static type 可以正常工作,因此它可能与 JsonProvider 不兼容。 (至少我无法让它工作。)

相反,我会手动定义类型,然后反序列化,如下所示:

open Newtonsoft.Json.Linq

type Datum =
    {
        Building : string
        Comment : string
        CompletedDate : DateTime
        ItemId : Guid
        NoOfUnit : int
        Organization :
            {|
                OrganizationId : Guid
                OrganizationName : string
            |}
        Adress : string
    }

let jobj = JObject.Parse(apiResponse)
let frame =
    jobj.["data"].["Shipments"].["Data"].Children()
        |> Seq.map (fun jtok -> jtok.ToObject<Datum>())
        |> Frame.ofRecords

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。