字典有一个单独的字典,我想在python的dataframe中对其进行转换,以便表中包含具有子列的列

字典有一个单独的字典,我想在python的dataframe中对其进行转换,以便表中包含具有子列的列,python,database,data-structures,Python,Database,Data Structures,i、 e删除“原始”和“长FMT” 在此之后,我希望它将dict列表转换为数据帧。以下是将多个这样的字典转换为数据帧的方法: Data=[{'endDate': {'raw': 1585612800, 'fmt': '2020-03-31'}, 'totalRevenue': {'raw': 67985000, 'fmt': '67.98M', 'longFmt': '67,985,000'}, 'costOfRevenue': {'raw': 0, '

i、 e删除“原始”和“长FMT”
在此之后,我希望它将dict列表转换为数据帧。

以下是将多个这样的字典转换为数据帧的方法:

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

pandas
实际上不支持“子列”,正如您所要求的那样。不过,它确实支持以
{'a':{'b':'value'}}
为您提供列
a.b='value'
的方式展平
json
对象。执行此操作的官方方法是json\u normalize,并将像这样使用

将熊猫作为pd导入
损益表历史记录={
“总收入”:{
“原始”:67985000,
“fmt”:“67.98米”,
“longFmt”:“67985000”
},
“费用回收”:{
“原始”:0,
“fmt”:“空”,
“longFmt”:“0”
},
“grossProfit”:{
“原始”:67985000,
“fmt”:“67.98米”,
“longFmt”:“67985000”
},
“总运营费用”:{
“原始”:46790000,
“fmt”:“46.79米”,
“longFmt”:“46790000”
},
“营业收入”:{
“原始”:21195000,
“fmt”:“21.2M”,
“longFmt”:“21195000”
}
}
df=pd.json\u规范化(损益表\u历史)
打印
df
会给你

>>df
totalRevenue.raw totalRevenue.fmt totalRevenue.longFmt CostOreference.raw CostOreference.fmt。。。Total Operating Expenses.fmt Total Operating Expenses.longFmt operatingIncome.raw operatingIncome.fmt operatingIncome.longFmt
0 67985000 67.98M 67985000 0零。。。46.79M 46790000 21195000 21.2M 21195000
[1行x 15列]
您可以继续使用动态访问这些列值

>col='totalOperatingExpenses'
>>>subcol='longFmt'
>>>df[f'{col}.{subcol}']
0    46,790,000
名称:totalOperatingExpenses.longFmt,数据类型:object

根据@Ann Zen的回答,在这两者之间选择一个
pd.DataFrame
初始化,或者您一直在使用的任何方法,取决于您的确切需求


您的目标是基于json数据的列的直观处理吗?您的目标是否是访问给定子列名称和基列名称的子列的明确方式?我能想到的大多数答案都是基于偏好的,差别很小。

你能澄清一下你想要的格式是什么吗?也许您的标签是特定于您正在使用的库的(术语“dataframe”通常是指,但并不总是指)。如果您使用的是数据库,请标记特定的数据库!我希望grossProfit列应该有3列raw、fmt和longFmt,其他coulmns(税前收入、所得税费用)也是一样。我只给你发了一套,但它有更多类似的字典。我也应用了相同的代码,得到了如我的img所示的结果。我已经更新了我的字典集。这是一个包含子字典的字典列表。感谢realy的帮助,但它在pd.json_normalise中显示错误。我从pandas.io.json导入了json_normalize,然后使用df=json_normalize(损益表历史记录)到底是什么错误?你把什么数据作为损益表历史记录?看起来您正在做一些不同的事情——这个答案中的所有代码都来自Python3.x中已经完成的执行
import pandas as pd

a = {...}
b = {...}

c = [a, b]
f = {'grossProfit':[], 'incomeBeforeTax':[], 'incomeTaxExpense':[]}
for e in c:
    for k in f.keys():
        f[d].append(e[d])

print(pd.DataFrame(f))