【发布时间】:2021-04-16 10:14:57
【问题描述】:
我有带有日期和数字的 MultiIndex,我有带有日期字符串的列表:
df.columns
>>>MultiIndex([(2020-10-22, 7),
(2020-10-22, 8),
(2020-10-22, 9),
(2020-10-22, 10),
(2020-10-22, 11),
(2020-10-22, 12),
(2020-10-22, 13),
(2020-10-22, 14),
...
dts
>>>['2020-10-24',
'2020-10-24',
'2020-10-25',
'2020-10-27',
'2020-10-27',
'2020-10-28',
'2020-10-28',
'2020-10-28',
'2020-10-30',
...
hrs
>>>[8,
9,
14,
10,
13,
11,
12,
13,
7,
12,
7,
11,
12,
7,
...
我希望列表的日期和数据框的类型相同,以便以后可以根据列表中的日期对数据框进行切片(我还有另一个小时列表...)
我试图通过将列表中的日期更改为日期时间来将它们转换为相同的日期:
dts=[datetime.strptime(x,'%Y-%m-%d') for x in dts]
>>>[datetime.datetime(2020, 10, 24, 0, 0),
datetime.datetime(2020, 10, 24, 0, 0),
datetime.datetime(2020, 10, 25, 0, 0),
datetime.datetime(2020, 10, 27, 0, 0),
datetime.datetime(2020, 10, 27, 0, 0),
datetime.datetime(2020, 10, 28, 0, 0),
datetime.datetime(2020, 10, 28, 0, 0),
datetime.datetime(2020, 10, 28, 0, 0),
...
但是当我尝试根据这些日期对数据框进行切片时,它不起作用,我相信是因为它是不同的类型。
for d,h in zip(dts,hrs):
date=d
hour=h
#print(date,hour)
idx = pd.IndexSlice
tmp1 = df.loc[:,idx[date,hour]]
...
---> 12 tmp1 = df.loc[:,idx[date,hour]]
KeyError: (datetime.datetime(2020, 10, 24, 0, 0), 8)
我不确定,但我相信 0,0 是问题所在,但我无法解决。
我的最终目标:能够根据日期和时间从我的数据框中切出正确的列。
编辑:df的列的dtypes:
Timestamp
2020-10-22 7 float64
8 float64
9 float64
...
2020-11-29 12 float64
编辑 2:
df.index.get_level_values(0).dtype
>>>dtype('int64')
编辑3:
print(df.columns.get_level_values(0)[:4])
>>>Index(['code', 'index', 2020-10-22, 2020-10-22], dtype='object')
print(df.columns.get_level_values(1)[:4])
>>>Index(['', '', 7, 8], dtype='object', name='Timestamp')
【问题讨论】:
标签: python pandas datetime slice multi-index