从字典创建Pandas系列

5

这是我的数据片段。 我想将这个字典转换成一个带有多级索引的系列。这个方面似乎可以工作,但是系列中的所有值都是NaN?

d = {(datetime.date(2017, 10, 19), 1026972): 24.91, (datetime.date(2017, 10, 19), 1026973): 10.68, (datetime.date(2017, 10, 19), 1026974): 654.7}

我尝试过 pd.Series(d)

你能给我一些提示吗?

2个回答

11

使用元组创建多级索引,并将其设置为索引,然后将字典值传递到序列中。

s = pd.Series(list(d.values()),index=pd.MultiIndex.from_tuples(d.keys()))

输出:

2017-10-19  1026974    654.70
            1026973     10.68
            1026972     24.91
dtype: float64

很有趣的是你的MultiIndex没有排序,嗯,不知道为什么。 - jezrael
可能是因为Python 3.5中字典的排序方式。 - Bharath M Shetty
我很喜欢新的dp。此外,Python3.5中的字典是无序的(排序从3.6开始)。 - cs95

2

我认为在Series构造函数中存在问题,即将date转换为datetime,然后值与Python date不匹配,导致出现NaN

s = pd.Series(d)
print (s.index.get_level_values(0))
DatetimeIndex(['2017-10-19', '2017-10-19', '2017-10-19'], dtype='datetime64[ns]', freq=None)

解决方案是将 datetime 转换为 timestamp 或像 Bharath 的答案中那样单独创建 Series
d = {(pd.Timestamp(k[0]), k[1]):v for k, v in d.items()}

print (d)
{(Timestamp('2017-10-19 00:00:00'), 1026973): 10.68, 
 (Timestamp('2017-10-19 00:00:00'), 1026974): 654.7, 
 (Timestamp('2017-10-19 00:00:00'), 1026972): 24.91}

s = pd.Series(d)
print (s)

2017-10-19  1026972     24.91
            1026973     10.68
            1026974    654.70
dtype: float64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接