检查索引是不是在 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 中设置行索引
在 Pandas 数据框布尔索引中使用“相反布尔值”的正确方法