我正在尝试转换此词典:
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
我使用了数据框进行转换,但是没有给出上面的格式,我该怎么办?谢谢!
pd.DataFrame.from_dict(data_c, orient='columns')
答案 0 :(得分:1)
这是我的解决方法:
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。
答案 1 :(得分:0)
尝试一下
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
答案 2 :(得分:-1)
摘自from_dict
orient:{'columns','index'},默认为'columns'
数据的“方向”。如果传递的dict的键应该是结果DataFrame的列,请传递“ columns”(默认值)。否则,如果键应该是行,则传递“索引”。
由于您希望键指示行,因此将orient
更改为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')
答案 3 :(得分:-2)
您拥有的是一个由单元素组成的字典的元组。这是单一的,而且设计较差。如果所有字典都对应于相同的列,那么元组列表就可以了。
我相信当前接受的答案取决于每个字典中只有一个key:value对。不幸的是,因为它会自动排除这种设计有意义的大多数情况。
如果假设不能更改“一元字典的元组”,那么我将建议这样做:
import pandas as pd
import itertools as itt
raw_data = ({"Jan 2018": 1000}, {"Feb 2018": 1100}, {"Mar 2018": 1400}, {"Apr 2018": 700}, {"May 2018": 800})
data = itt.chain.from_iterable(curr.items() for curr in raw_data)
df = pd.DataFrame(data, columns=['date', 'balance'])
这是所有这些的明智选择。
import pandas as pd
data = [("Jan 2018", 1000), ("Feb 2018", 1100), ("Mar 2018", 1400), ("Apr 2018", 700), ("May 2018", 800)]
df = pd.DataFrame(data, columns=['date', 'balance'])
df
:
date balance
0 Jan 2018 1000
1 Feb 2018 1100
2 Mar 2018 1400
3 Apr 2018 700
4 May 2018 800
如果这些日期是实际的日期类型,而不是字符串,那可能会更好。我稍后会更改。