这是我的数据片段。 我想将这个字典转换成一个带有多级索引的系列。这个方面似乎可以工作,但是系列中的所有值都是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)
你能给我一些提示吗?
这是我的数据片段。 我想将这个字典转换成一个带有多级索引的系列。这个方面似乎可以工作,但是系列中的所有值都是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)
你能给我一些提示吗?
使用元组创建多级索引,并将其设置为索引,然后将字典值传递到序列中。
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
我认为在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