Python 将字典转换为数据帧

Python 将字典转换为数据帧,python,pandas,Python,Pandas,我正在尝试转换此词典: data = ({"Jan 2018":1000},{"Feb 2018":1100},{"Mar 2018":1400},{"Apr 2018":700},{"May 2018":800}) data 要创建数据帧,请执行以下操作: date balance Jan 2018 1000 Feb 2018 1100 Mar 2018 1400 Apr 2018 700 May 2018 800 我使用dataframe进行转换,但它没有

我正在尝试转换此词典:

data = ({"Jan 2018":1000},{"Feb 2018":1100},{"Mar 2018":1400},{"Apr 2018":700},{"May 2018":800})
data
要创建数据帧,请执行以下操作:

date       balance
Jan 2018   1000
Feb 2018   1100
Mar 2018   1400
Apr 2018   700
May 2018   800
我使用dataframe进行转换,但它没有给出上面的格式,我该怎么做?谢谢大家!

pd.DataFrame.from_dict(data_c, orient='columns')

从目录的
文档中

方向:{'columns','index'},默认为'columns'

数据的“方向”。如果传递的dict的键应该是结果数据帧的列,则传递“columns”(默认值)。否则,如果键应该是行,则传递“index”

由于希望键指示行,因此将
方向
更改为
索引
将得到所需的结果。但是,首先需要将数据放在单个字典中。此代码将为您提供所需的结果

data = ({"Jan 2018":1000},{"Feb 2018":1100},{"Mar 2018":1400},{"Apr 2018":700},{"May 2018":800})

d = {}
for i in data:
    for k in i.keys():
        d[k] = i[k]

df = pd.DataFrame.from_dict(d, orient='index')
以下是我的解决方案:

import pandas as pd

data = ({"Jan 2018":1000},{"Feb 2018":1100},{"Mar 2018":1400},{"Apr 2018":700},{"May 2018":800})

arr = [list(*d.items()) for d in data]

df = pd.DataFrame(arr, columns=['data', 'balance'])
在将字典的元组传递给DataFrame之前,需要从字典的元组中获取正确的数组。

试试这个

df = pd.DataFrame.from_dict({k: v for d in data for k, v in d.items()}, 
                             orient='index', 
                             columns=['balance']).rename_axis('date').reset_index()

Out[477]:
       date  balance
0  Jan 2018     1000
1  Feb 2018     1100
2  Mar 2018     1400
3  Apr 2018      700
4  May 2018      800

这里有一组单元素字典。这是一成不变的,糟糕的设计。如果所有字典都对应于相同的列,那么元组列表就可以了


解决 我相信目前公认的答案取决于每个字典中只有一个键:值对。这是不幸的,因为它自动排除了大多数这种设计有意义的情况


假设“1元素dicts的元组”无法更改,我建议您这样做:

将熊猫作为pd导入
将itertools作为itt导入
原始数据=({2018年1月:1000},{2018年2月:1100},{2018年3月:1400},{2018年4月:700},{2018年5月:800})
数据=itt.chain.from\u iterable(原始\u数据中的curr.items()表示curr)
df=pd.DataFrame(数据,列=['date','balance'])

这是一个明智的替代方案

将熊猫作为pd导入
数据=[(“2018年1月”,1000),(“2018年2月”,1100),(“2018年3月”,1400),(“2018年4月”,700),(“2018年5月”,800)]
df=pd.DataFrame(数据,列=['date','balance'])
df

日期余额
2018年1月0日1000
2018年2月1日1100
2018年3月2日1400
2018年4月3日700
2018年5月4日800

如果这些日期是实际的日期类型,而不是字符串,可能会更好。我稍后会更改它。

如果您将数据()替换为[]?这不是字典。为什么要用元组而不是列表,为什么要用一堆字典?这是这里更大的问题。@AlexanderCécile:我更喜欢使用听写理解
dict.update
仍然需要一个for循环来获取要传递给它的
数据的每个元素。调用
d_1.update(data)
将不起作用,因为
data
是dict的元组。是的,循环是不幸的。看到
{k:v代表k,v在…}
时感觉很奇怪。这个解决方案不是依赖于每个字典中只有一个元素吗?