如何输入多索引熊猫数据框 Python3.8+ 的提示?

Posted

技术标签:

【中文标题】如何输入多索引熊猫数据框 Python3.8+ 的提示?【英文标题】:How to type hinting of multi-indexed pandas dataframe, Python3.8+? 【发布时间】:2021-12-01 08:44:18 【问题描述】:

数据框df的列是多索引的。

>>>df
    c1      c2    
    d1  d2  d1  d2
r1  11  12  21  22

因此,使用代码list(df.columns.levels[0] 创建list['c1', 'c2']。以下代码可以正常运行。但是 PyCharm 在print(list(df.columns.levels[0])) 行中将levels 标记为警告Unresolved attribute reference 'levels' for class 'Index'

我认为这可以通过print_columns 的函数签名中更具体的类型提示来解决。在下面的代码中,我只使用了df: pd.DataFrame 类型。 PyCharm 认为它是一个没有多索引的简单数据框。

你能告诉我如何改进类型提示吗?或者您有其他解决方案可以从 PyCharm 中删除警告吗?

谢谢。

import pandas as pd


def get_df() -> pd.DataFrame:
    data = 
        ('c1', 'd1'): [11],
        ('c1', 'd2'): [12],
        ('c2', 'd1'): [21],
        ('c2', 'd2'): [22],
    

    df = pd.DataFrame.from_dict(data)
    df.index = ['r1']
    return df


def print_columns(df: pd.DataFrame):
    print(list(df.columns.levels[0]))  # prints ['c1', 'c2']


if __name__ == '__main__':
    df_ = get_df()
    print_columns(df=df_)

【问题讨论】:

【参考方案1】:

根据Pandas documentation,可以像这样对多级对象进行类型提示:

import pandas as pd
...
def print_columns(df: pd.MultiIndex) -> None:
    print(list(df.columns.levels[0]))

【讨论】:

感谢您的回答。但是对于df: pd.MultiIndex,PyCharm 将columns 标记为警告而不是levels 我担心这可能是 PyCharm 的限制,根据这个类似的帖子 ***.com/a/42440466/11246056。但这篇其他帖子可能会有所帮助:***.com/a/67006481/11246056

以上是关于如何输入多索引熊猫数据框 Python3.8+ 的提示?的主要内容,如果未能解决你的问题,请参考以下文章

如何将熊猫数据框转换为多索引数据框

熊猫如何切片多索引数据框?

如何重新索引多索引熊猫数据框?

枢轴熊猫数据框具有多索引列

如何将熊猫数据框多索引列移动到 2 行

来自按级别分组的多索引熊猫数据框的子图