检查索引是不是在 Pandas 中

Posted

技术标签:

【中文标题】检查索引是不是在 Pandas 中【英文标题】:Check if an Index is in Pandas检查索引是否在 Pandas 中 【发布时间】:2021-12-29 20:04:24 【问题描述】:

here 的问题指出,要检查 DataFrame 中是否存在具有特定索引的条目,可以编写条件:

if 'index' in df.index:
    print(True)

就我而言,发生了一些奇怪的事情:我正在对从 pyEX API/包中提取的 Stock 信息的 DataFrame 运行测试,检查 df.index 中是否包含一系列日期,例如:

for i in ['2021-11-18', '2021-04-19', '2021-06-20', '2021-05-10']:
    if i in df.index:
       print(i + "is an index")

问题在于,即使对于未打印在 DataFrame 上的日期,它也被评估为 True。不知道这怎么可能。所以当遇到:

              close    volume
date                         
2021-11-17  1092.85  31696364
2021-11-16  1071.54  26740198
2021-11-15  1037.27  35725807

我的 for 循环中的所有上述日期仍在索引中进行评估。这怎么可能?

【问题讨论】:

您确定这些日期不在您的 df 中吗?当你df.loc['2021-11-18'] 时会发生什么? 我无法用您的示例重现相同的输出。它不打印任何东西。 any((date in df.index) for date in ['2021-11-18', '2021-04-19', '2021-06-20', '2021-05-10']) 的结果为 False。 ` 【参考方案1】:

我无法重现您的错误。以下仅打印我添加并在索引中的最后日期。

import pandas as pd
import io

df = pd.read_csv(io.StringIO(
"""
date,close,volume        
2021-11-17,1092.85,31696364
2021-11-16,1071.54,26740198
2021-11-15,1037.27,35725807
"""
)).set_index('date')

for i in ['2021-11-18', '2021-04-19', '2021-06-20', '2021-05-10','2021-11-15']:
    if i in df.index:
       print(i + " is an index")

【讨论】:

以上是关于检查索引是不是在 Pandas 中的主要内容,如果未能解决你的问题,请参考以下文章

检查 pandas.Series.index 是不是包含值

根据另一行的值是不是已被索引,在 pandas 中设置行索引

在 Pandas 数据框布尔索引中使用“相反布尔值”的正确方法

在 Python pandas 中,从 1 而不是 0 开始行索引而不创建额外的列

如何测试对象是不是为 pandas 日期时间索引?

Pandas-分组函数和分层索引的展开