代码之家  ›  专栏  ›  技术社区  ›  David Gilbertson

访问Pandas df.index.reorder_levels()时如何避免类型错误

  •  0
  • David Gilbertson  · 技术社区  · 1 年前

    我有一个带有多索引的Pandas数据帧,所以这是有效的代码:

    df.index = df.index.reorder_levels(["B", "A"])
    

    但在VS代码中(打开类型检查,设置为“基本”),它显示为一个错误,因为默认情况下 df.index Index MultiIndex .

    enter image description here

    我可以为创建一个新类型 多索引 数据帧和使用 cast ,但这似乎有点古怪。

    df = pd.DataFrame(
        dict(
            A=[1, 2, 3],
            B=[4, 5, 6],
            C=[4, 5, 6],
        )
    ).set_index(["A", "B"])
    
    
    class DataFrameMulti(pd.DataFrame):
        index: pd.MultiIndex
    
    
    df = typing.cast(DataFrameMulti, df)
    
    df.index = df.index.reorder_levels(["B", "A"])
    

    有没有更好的方法:

    a) 正确键入数据帧,无需强制转换

    b) 避免类型错误而不关闭其他错误?

    编辑:澄清一下,问题并不是针对 多索引 reorder_levels ,它是关于在索引不在的地方键入任何数据帧 指数 。例如。 DatetimeIndex : enter image description here

    1 回复  |  直到 1 年前
        1
  •  1
  •   PV8    1 年前

    对于第一部分: 不是吗 df.reorder_levels ,请参阅 docs .

    因此例如:

    df = df.reorder_levels(['B','A'])
    

    第二部分:

    df_test = pd.DataFrame(dict(A=[1,2,3]), index=pd.date_range("2000-01-01", periods=3))
    print(df_test.index.month)
    Index([1, 1, 1], dtype='int32')
    print(df_test.index.day)
    Index([1,2,3], dytpe='int32')
    

    它是有效的。我也在视觉工作室代码。