【问题标题】:How to use apply function and lambda to loop through json object in python?如何使用apply函数和lambda循环遍历python中的json对象?
【发布时间】:2021-06-22 13:40:04
【问题描述】:

我有这个 json 对象 name_lookup,如下所示:

[
  {
    "ID": "70B52DA6-F099-4D01-BBD0-03EA97292C26",
    "Name": "Join"
  },
  {
    "ID": "442B1598-20CF-4425-8A28-0438FBF77C46",
    "Name": "Bob"
  }
]

我的数据框 (df) 具有结构:

Id   Name
     Join
     Bob

如何遍历上面的 Json 对象并比较 name 以在 df 中填写 id?

我使用这个函数来加载json文件:

def read_configs(file_name):
    with open(file_name, "r", encoding='utf-8') as read_file:
        lookup = json.load(read_file)
    return lookup

请帮助我。非常感谢您的帮助

【问题讨论】:

标签: python pandas lambda apply


【解决方案1】:

假设名称是唯一的,可以使用 Pandas 的map 函数:

import pandas as pd

lookup = [
    {
        "ID": "70B52DA6-F099-4D01-BBD0-03EA97292C26",
        "Name": "Join"
    },
    {
        "ID": "442B1598-20CF-4425-8A28-0438FBF77C46",
        "Name": "Bob"
    }
]

df = pd.DataFrame([[None, "Join"], [None, "Bob"]], columns=["ID", "Name"])

# Convert the list of entities to a dictionary and map names by it
df["ID"] = df["Name"].map({entity["Name"]: entity["ID"] for entity in lookup})

【讨论】:

  • 嗨@Elisha,感谢您的解决方案,但我遇到了这个问题:一些现有记录已经有ID,所以我只想映射ID 以使该字段为空,我尝试修改您的代码: df['ID'] = df['ID'].apply(lambda x: x.map({x: entity["ID"] for entity in Province_lookup}) if pd.isna(x) else x) 但它输出错误:(我该如何检查?
  • 屏蔽相关行是可能的:df.loc[df["ID"].isnull(), "ID"] = df.loc[df["ID"].isnull(), "Name"].map({entity["Name"]: entity["ID"] for entity in lookup})
  • 嗨@Elisha,非常感谢你到目前为止的帮助
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2019-02-11
  • 1970-01-01
  • 2022-01-14
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多