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