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在…}
时感觉很奇怪。这个解决方案不是依赖于每个字典中只有一个元素吗?