Pandas嵌套JSON归一化时如何获取并保留SecID与IssuerID字段
Pandas嵌套JSON归一化时如何获取并保留SecID与IssuerID字段
嘿,我来帮你搞定这个问题!你现在的问题出在meta参数的设置上——之前你把整个SecInfo字段放进了meta里,导致它被当成一个整体保留下来,而没有提取里面的SecID和IssuerID。
要解决这个问题,我们需要明确告诉pd.json_normalize,除了最外层的ActionID和Date,还要从SecInfo层级里提取SecID和IssuerID这两个字段。具体来说,用元组形式指定嵌套字段的路径,让pandas知道去哪里找这些值。
下面是修改后的完整代码:
import pandas as pd data = [{ "ActionID":"I", "Date":"01/13/2020", "SecInfo":[ { "SecID":96964, "IssuerID":35, "StoreInfo":[ { "Code":"3342", "Symbol":"LPPER", "Status":"A" } ] } ] }] # 精准指定需要提取的元数据字段 df = pd.json_normalize( data, record_path=['SecInfo', 'StoreInfo'], # 展开最内层的StoreInfo数组 meta=[ 'ActionID', # 外层字段 'Date', # 外层字段 ['SecInfo', 'SecID'], # 从SecInfo层级提取SecID ['SecInfo', 'IssuerID'] # 从SecInfo层级提取IssuerID ], errors='ignore' ) # 可选:把默认的带点列名(比如SecInfo.SecID)改成简洁的名字 df.columns = ['Code', 'Symbol', 'Status', 'ActionID', 'Date', 'SecID', 'IssuerID'] df.to_csv('gg.csv', index=False)
运行这段代码后,生成的gg.csv内容就是你想要的样子:
Code,Symbol,Status,ActionID,Date,SecID,IssuerID 3342,LPPER,A,I,01/13/2020,96964,35
简单说下原理:record_path负责展开最内层的StoreInfo数组,而meta里的['SecInfo', 'SecID']会让pandas自动关联到当前StoreInfo所属的SecInfo元素,把对应的SecID和IssuerID提取出来,而不是把整个SecInfo对象塞进去。
备注:内容来源于stack exchange,提问作者Zalman
相关产品推荐
相关产品推荐

