python - 字典有一个单独的字典,我想将它转换为 python 的数据框,以便表包含具有子列的列
问题描述
Data=[{'endDate': {'raw': 1585612800, 'fmt': '2020-03-31'},
'totalRevenue': {'raw': 67985000, 'fmt': '67.98M', 'longFmt':
'67,985,000'},
'costOfRevenue': {'raw': 0, 'fmt': None, 'longFmt': '0'},
'grossProfit': {'raw': 67985000, 'fmt': '67.98M', 'longFmt':
'67,985,000'},
'sellingGeneralAdministrative': {'raw': 37779000,
'fmt': '37.78M'}},
{'endDate': {'raw': 1577750400, 'fmt': '2019-12-31'},
'totalRevenue': {'raw': 79115000, 'fmt': '79.11M', 'longFmt':
'79,115,000'},
'costOfRevenue': {'raw': 0, 'fmt': None, 'longFmt': '0'},
'grossProfit': {'raw': 79115000, 'fmt': '79.11M', 'longFmt':
'79,115,000'},
' sellingGeneralAdministrative': {'raw': 36792000,
'fmt': '36.79M',
'longFmt': '36,792,000'}}]
i want Data in this format
Data =[{endDate:{'fmt':'2020-03-31'},
totalRevenue:{'fmt':67.98M},
costofRevenue:{'fmt':None}' and so on
即删除'raw'和'longfmt',然后我希望它将dict列表转换为数据框。
解决方案
pandas
正如您所要求的那样,实际上并不支持“子列”。但是,它确实以一种为您提供 columnjson
的方式支持展平对象。执行此操作的官方方法是,并且会像这样使用{'a': {'b': 'value'}}
a.b = 'value'
json_normalize
import pandas as pd
income_statement_history = {
"totalRevenue": {
"raw": 67985000,
"fmt": "67.98M",
"longFmt": "67,985,000"
},
"costOfRevenue": {
"raw": 0,
"fmt": 'null',
"longFmt": "0"
},
"grossProfit": {
"raw": 67985000,
"fmt": "67.98M",
"longFmt": "67,985,000"
},
"totalOperatingExpenses": {
"raw": 46790000,
"fmt": "46.79M",
"longFmt": "46,790,000"
},
"operatingIncome": {
"raw": 21195000,
"fmt": "21.2M",
"longFmt": "21,195,000"
}
}
df = pd.json_normalize(income_statement_history)
印刷df
会给你
>>> df
totalRevenue.raw totalRevenue.fmt totalRevenue.longFmt costOfRevenue.raw costOfRevenue.fmt ... totalOperatingExpenses.fmt totalOperatingExpenses.longFmt operatingIncome.raw operatingIncome.fmt operatingIncome.longFmt
0 67985000 67.98M 67,985,000 0 null ... 46.79M 46,790,000 21195000 21.2M 21,195,000
[1 rows x 15 columns]
您可以继续动态访问这些列值
>>> col = 'totalOperatingExpenses'
>>> subcol = 'longFmt'
>>> df[f'{col}.{subcol}']
0 46,790,000
Name: totalOperatingExpenses.longFmt, dtype: object
在这之间做出决定,pd.DataFrame
@Ann Zen 的回答所暗示的初始化,或者你一直在使用的任何方法,取决于你的确切需要。
您的目标是基于 json 数据对列进行视觉上令人愉悦的处理吗?给定子列的名称和基列的名称,您的目标是访问子列的清晰方法吗?我能想到的大多数答案仅基于偏好,差异很小。
推荐阅读
- java - 如何从 Maven Checkstyle 插件检查中排除源根目录中的文件?
- jenkins - Jenkinsfile: How to get the trigger of a build
- arrays - 带有对象数组的打字稿的 keyof
- github - 表格无法正确呈现 - Markdown Github
- java - 在 LinkedList 中定义一个 Deque
- sql - SQL Server“varchar 值 '99101500728' 的转换溢出了一个 int 列。”
- javascript - 如何从 localforage 获取数据?
- django - 如何在 Django 中处理从 get() 到 filter() 的异常
- css - AMP整页封面背景视频
- groovy - 在构建地图时四舍五入浮点数