python - 如何将带有dicts的pandas列中的值移动到仅包含该值的新列中
问题描述
我有一个高度嵌套的 JSON 文件,我将其规范化为 Pandas 数据框。结果是所有的键都变成了列,而值变成了行。问题是我有一些列仍然包含字典并且没有正确规范化。数据框有超过 8000 行和 3000 列,因此无法手动完成。
这是 JSON 文件:https ://justpaste.it/9nfke
例如:
我有以下列命名:
Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp
其中包含字典,如下所示:
[{'Desc': 'MISCELLANEOUS', 'ExclusionCd': '01', 'ExclusionAmt': '13'}, {'Desc': 'GRANT REFUNDS', 'RelatedOrExemptFunctionIncmAmt': '159502'}]
如您所见,有一个Desc
ExclusionCd
ExclusionAmt
等。
我已经在我的数据框中填充了以这些命名的列:
Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp.BusinessCd Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp.Desc Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp.ExclusionAmt Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp.ExclusionCd Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp.RelatedOrExemptFunctionIncmAmt Return.ReturnData.IRS990PF.AnalysisIncomeProducingActyGrp.OtherRevenueDescribedGrp.UnrelatedBusinessTaxblIncmAmt
如何将这些值移动到各自的列中?请记住,我可能有数百个这样的,我不能手工完成。它需要自动化。谢谢!
解决方案
- 发布的数据显示了一条记录,不清楚该文件是否包含这些记录的列表。
- 使用 pandas,用于解析 .json 中的 JSON 记录列表的最佳方法
pd.json_normalize
。- 该示例很长,无法在答案中发布,但请注意,当您在本地运行它时,所有键都被解析出来,并且连续没有
dict
s 作为值。
- 该示例很长,无法在答案中发布,但请注意,当您在本地运行它时,所有键都被解析出来,并且连续没有
- 此键
Return.ReturnData.IRS990PF
在 PasteBin 数据示例中不可用。- 键中
IRS990
,只有IRS990
和IRS990Schedule...
可用。
- 键中
- 另一种解压作为字典列表的值的方法是使用
meta
参数json_normalize
- 请参阅此答案以获取一个很好的示例
import pandas as pd
import json
from pathlib import Path
# path to file
p = Path('c:\some_path\test.json')
# read in the JSON file
with p.open('r', encoding='utf-8') as f:
data = json.loads(f.read())
# parse with pandas
df = pd.json_normalize(data)
# if there's a list of dictionaries in the resulting dataframe, they can be unpacked with something like
df['Return.ReturnData.IRS990ScheduleO.SupplementalInformationDetail'].apply(pd.json_normalize)
推荐阅读
- javascript - 向现有对象键添加新值
- reactjs - 即使在从字符串生成散列后也出现唯一键警告
- c# - 可以根据另一个图像的形状剪切图像吗?
- https - Istio 1.1.11 不支持 http2?
- java - 如何从 java 程序运行 docker 映像?
- c++ - 带有 GDB 调试器的 VS Code 内存视图
- swift - 为什么我不能扩展 IntegerType?
- r - 我希望根据每个分组级别内的子列表保留/丢弃 PURRR 嵌套列表中的项目
- gitlab-api - 如何通过 id 检索 gitlab 问题?
- java - org.apache.commons.lang3.time.DateFormatUtils.format() 线程安全吗?