求助:从JSON列表列提取字段生成单独新列
提取JSON列表列中的指定字段到单独列
假设你用Python的Pandas处理数据,以下是直接可落地的实现方法:
1. 准备环境与数据预处理
首先导入所需库,并将原始的JSON字符串列转为可操作的Python列表:
import pandas as pd import json # 模拟你的原始数据(json_col为存储JSON列表的目标列) data = { "json_col": [ '''[{ "$id": "2", "Name": "IDMAWH-L853902$", "Mail": "ENTA.AD.COM", "Type": "account" }, { "$id": "3", "Address": "::ffff:10.192.20.125", "Type": "ad" }]''', '''[{ "$id": "2", "MailboxPrimaryAddress": "bw165@gmail.com", "Upn": "bw165@gmail.com", "AadId": "936b3d90-b86c-4dba-812d-8f6025c1e379", "RiskLevel": "None", "Type": "mailbox", "Urn": "urn:UserEntity:1ccd1b06205baec05fe19e55e0d602c6", "Source": "OATP", "FirstSeen": "0001-01-01T00:00:00" }, { "$id": "3", "Recipient": "bw165@gmail.com", "Urls": ["https://towardsdatascience.com/cleaning-and-extracting-json-from-pandas-dataframes-f0c15f93cb38"]}]''' ] } df = pd.DataFrame(data) # 将字符串格式的JSON转为Python列表 df["json_col"] = df["json_col"].apply(json.loads)
2. 编写字段提取函数
遍历每个JSON列表中的元素,精准提取目标字段:
def extract_target_fields(json_list): account = None ip = None urls = None for item in json_list: # 提取account(取Type为account的Name字段,可按需替换为Mail) if item.get("Type") == "account": account = item.get("Name") # 提取IP,自动去除::ffff:前缀 elif item.get("Type") == "ad": raw_addr = item.get("Address") if raw_addr: ip = raw_addr.replace("::ffff:", "") # 提取Urls列表 if "Urls" in item: urls = item.get("Urls") return pd.Series([account, ip, urls], index=["Account", "IP", "Urls"])
3. 生成单独列
将函数应用到目标列,直接新增三个提取后的字段:
df[["Account", "IP", "Urls"]] = df["json_col"].apply(extract_target_fields)
最终效果
处理后的数据表会新增三列:
- 第一行:
Account为IDMAWH-L853902$,IP为10.192.20.125,Urls为None - 第二行:
Account为None,IP为None,Urls为["https://towardsdatascience.com/cleaning-and-extracting-json-from-pandas-dataframes-f0c15f93cb38"]
如果需要调整提取规则(比如Account要同时包含Name和Mail),直接修改函数中对应赋值语句即可。
内容的提问来源于stack exchange,提问作者Lopa
相关产品推荐
相关产品推荐

