从列表中获取特定行失败

2024-09-21 03:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这是API输出:

{
    "resultLength":133710,
    "resultList" : [
            {
            "date" :  1510872659568,
            "requestParameters" : [
              "datesAsStringsFormat=dd-MMM-yyyy",
              "datesAsStrings=true",
              "outputFormat=xlsx",
              "requestId=14e7aa1f-680f-49d0-8e76-cfd797b9b6b6"
            ],
            "score" :  1,
            "totalRequestTime" :  1261,
            "userId" :  167895
            },
            {
            "date" :  1510872659679,
            "requestParameters" : [
              "datesAsStringsFormat=dd-MMM-yyyy",
              "datesAsStrings=true",
              "outputFormat=xlsx",
              "requestId=14e7aa1f-680f-49d0-8e76-cfd797b9be78"
            ],
            "score" :  1,
            "totalRequestTime" :  1255,
            "userId" :  452669
            }
    ]
}

我正在尝试为每个userId提取requestId,但是由于某些原因我不能。这就是我所尝试的:

req = requests.get(url=url, auth=(user,password))
out = req.json()
results = out['resultList']

solr_df = pd.DataFrame()
for record in results:
    requestId = pd.DataFrame(record['requestParameters'][3],columns=['requestId'])
    df = pd.DataFrame(requestId)
    df['userId'] = record['userId']
    solr_df = solr_df.append(df)

但是它抛出一个ValueError: DataFrame constructor not properly called! 你能帮忙改正错误吗?你知道吗

如果只提取每个requestParameter的requestId行太困难,那么您可以在for语句运行后帮助删除所有与requestId不相关的行吗?你知道吗

编辑:

当我为record['requestParameters']运行它时,它成功地运行了,但是它提取了每个用户id的所有requestParameters行。你知道吗

我只是尝试了这样的切片:portfolioId = pd.DataFrame(record['requestParameters'][-1:0])它确实返回了结果(与单个索引调用不同),但是它同时用于outputFormat和requestId行。 然后我尝试了portfolioId = pd.DataFrame(record['requestParameters'][1:2]),它返回了requestId和datesAsString的结果。你知道吗

看起来requestParameters行的索引不一致(不确定为什么可能),是否仍有方法从列表中获取特定行?你知道吗

谢谢


Tags: dataframedfdaterecordsolrddpduserid
3条回答

要提取id,可以尝试以下操作:

req = requests.get(url=url, auth=(user,password))
out = req.json()
results = out['resultList']
ids = [i["requestParameters"][-1] for i in results["resultList"]]

输出:

['requestId=14e7aa1f-680f-49d0-8e76-cfd797b9b6b6', 'requestId=14e7aa1f-680f-49d0-8e76-cfd797b9be78']

或者,如果您只需要数值:

import re
req = requests.get(url=url, auth=(user,password))
out = req.json()
results = out['resultList']
final_val = [re.findall('(?<=requestId\=)[\w-]+', i["requestParameters"][-1])[0] for i in results["resultList"]]

输出:

['14e7aa1f-680f-49d0-8e76-cfd797b9b6b6', '14e7aa1f-680f-49d0-8e76-cfd797b9be78']

根据文件:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html

req = requests.get(url=url, auth=(user,password))
out = req.json()
results = out['resultList']

df = pd.DataFrame()
for record in results:
    requestId = pd.DataFrame({"requestId": record['requestParameters'][3]})
    df = pd.DataFrame(requestId)
    df['userId'] = record['userId']
    df = df.append(df)

为什么不尝试在json编辑器在线(http://www.jsoneditoronline.org/)中解析json字符串呢?如果json字符串有效或无效,它可能会对您有所帮助。你知道吗

第12行("totalRequestTime" : 1261)后缺少逗号。我想这可能是第一个问题。你知道吗

相关问题 更多 >

    热门问题