我有多索引df如下
x y
id date
abc 3/1/1994 100 7
9/1/1994 90 8
3/1/1995 80 9
将日期存储为str。
我想解析日期索引。以下陈述
df.index.levels[1] = pd.to_datetime(df.index.levels[1])
返回错误:
TypeError: 'FrozenList' does not support mutable operations.
答案 0 :(得分:7)
如上所述,您必须重新创建索引:
df.index = df.index.set_levels([df.index.levels[0], pd.to_datetime(df.index.levels[1])])
答案 1 :(得分:1)
您无法就地修改它。您可以使用pandas.MultiIndex.map创建新索引,然后分配它:
new_tuples = df.index.map(lambda x: (x[0], pd.to_datetime(x[1])))
df.index = pd.MultiIndex.from_tuples(new_tuples, names=["id", "date"])
答案 2 :(得分:0)
无法就地修改MultiIndex
,因此我们必须重新创建它。为此,我们使用get_level_values
获取多引号级别Series
,然后应用pd.to_datefime
,然后从两个级别重建多索引。
index = pd.MultiIndex.from_tuples([('abc', '3/1/1994'), ('abc', '9/1/1994')],
names=('id', 'date'))
df = pd.DataFrame({'x': [1, 2]}, index=index)
print(df.index.get_level_values(level=1).dtype)
# object
df.index = pd.MultiIndex.from_arrays([index.get_level_values(level=0),
pd.to_datetime(
index.get_level_values(level=1))])
print(df.index.get_level_values(level=1).dtype)
# datetime64[ns]