嵌套字典到熊猫 df
Posted
技术标签:
【中文标题】嵌套字典到熊猫 df【英文标题】:Nested dictionary to pandas df 【发布时间】:2019-03-12 16:21:09 【问题描述】:我在***中的第一个问题!
我有一个三重嵌套字典,我想将其转换为 pandas df。 字典结构如下:
dictionary = 'CompanyA': 'Revenue': date1 : $1, date2: $2,...
'ProfitLoss': date1 : $0, date2: $1,
'CompanyB': 'Revenue': date1 : $1, date2: $2,...
'ProfitLoss': date1 : $0, date2: $1,
'CompanyC': 'Revenue': date1 : $1, date2: $2,...
'ProfitLoss': date1 : $0, date2: $1
到目前为止,我能够使用以下方法构造一个 df:
df = pd.DataFrame.from_dict(dictionary)
但结果是一个 df,其值为字典,如下所示:
CompanyA CompanyB CompanyC
Revenue date1:$0,.. date1:$1,.. date1:$0,..
ProfitLossdate1:$0,.. date1:$0,.. date1:$0,..
我希望表格如下所示:
CompanyA CompanyB CompanyC
Revenue Date1 $1 $1 $1
Date2 $2 $2 $2
ProfitLoss Date1 $0 $0 $0
Date2 $1 $1 $1
我曾尝试使用 pd.MultiIndex.from_dict (.from_product) 并更改索引,但没有结果。知道下一步该怎么做吗?任何提示将不胜感激!
【问题讨论】:
Construct pandas DataFrame from items in nested dictionary的可能重复 【参考方案1】:我知道您是新手,但可能会有类似问题的答案,请参阅this。下次尝试使用关键字寻找类似的问题。比如我通过搜索“pandas nested dict”找到了我链接的那个,就是这样,第一个链接是SO帖子!
无论如何,您需要重塑您的输入dict
。你想要一个结构如下的字典:
'CompanyA':
('Revenue', 'date1'): 1,
('ProfitLoss', 'date1'): 0,
...
我会这样做:
import pandas as pd
data =
'CompanyA':
'Revenue':
"date1": 1,
"date2": 2
,
'ProfitLoss':
"date1": 0,
"date2": 1
,
'CompanyB':
'Revenue':
"date1": 4,
"date2": 5
,
'ProfitLoss':
"date1": 2,
"date2": 3
# Reshape your data and pass it to `DataFrame.from_dict`
df = pd.DataFrame.from_dict(i: (j, k): data[i][j][k]
for j in data[i] for k in data[i][j]
for i in data, orient="columns")
print(df)
输出:
CompanyA CompanyB
ProfitLoss date1 0 2
date2 1 3
Revenue date1 1 4
date2 2 5
编辑
使用实际日期时间来回复您的评论:
import pandas as pd
import datetime as dt
date1 = dt.datetime.now()
date2 = date1 + dt.timedelta(days=365)
data =
'CompanyA':
'Revenue':
date1: 1,
date2: 2
,
'ProfitLoss':
date1: 0,
date2: 1
,
'CompanyB':
'Revenue':
date1: 4,
date2: 5
,
'ProfitLoss':
date1: 2,
date2: 3
# Reshape your data and pass it to `DataFrame.from_dict`
df = pd.DataFrame.from_dict(i: (j, k): data[i][j][k]
for j in data[i] for k in data[i][j]
for i in data, orient="columns")
print(df)
输出:
CompanyA CompanyB
ProfitLoss 2018-10-08 11:19:09.006375 0 2
2019-10-08 11:19:09.006375 1 3
Revenue 2018-10-08 11:19:09.006375 1 4
2019-10-08 11:19:09.006375 2 5
【讨论】:
Edgar,感谢您抽出宝贵时间回答我的问题。按照您的示例,我得到了与使用 Pandas MultiIndex 之前相同的结果。在这两种情况下,我都得到了正确的表格格式,但表格内没有数据,只有 NaN。日期格式( datetime.date(2018, 3, 31): 1.0 )是否与错误填充表格有关? @edmond-dantes,检查你的字典结构。我认为dictionary = 'CompanyA': 'Revenue': date1 : $1, date2: $2,...
应该是dictionary = 'CompanyA': 'Revenue': date1 : $1, date2: $2,...
。
原始字典的结构 没关系,我放错了 ,抱歉!继续这个,根据 GitHub 上的这篇文章,看起来有一个错误。这正是我的日期问题:[github.com/pandas-dev/pandas/issues/19993]
我会考虑回答我的问题!以上是关于嵌套字典到熊猫 df的主要内容,如果未能解决你的问题,请参考以下文章