熊猫系列从字典

时间:2017-10-30 10:10:38

标签: pandas

这是我数据的一个片段。 我想将这个字典转换为带有多索引的系列。这似乎方面似乎有效,但系列中的所有值都是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 个答案:

答案 0 :(得分:6)

使用元组中的多索引并将其设置为索引,然后将dict值传递给series。

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

答案 1 :(得分:2)

我认为Series构造函数中存在问题,date转换为datetime s,然后值与python date s不匹配 - 获取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或单独创建Series,如Bharath答案:

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