检查pandas dataframe index中是否存在值

Abh*_*bhi 120 python ipython pandas

我确信有一种明显的方法可以做到这一点,但现在不能想到任何光滑的东西.

基本上,反而提高了例外,我想获得TrueFalse以查看是否在大熊猫存在价值df指数.

import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g']  # (should give False)
Run Code Online (Sandbox Code Playgroud)

我现在的工作如下

sum(df.index == 'g')
Run Code Online (Sandbox Code Playgroud)

Gui*_*not 211

这应该可以解决问题

'g' in df.index
Run Code Online (Sandbox Code Playgroud)

  • 当多个条目共享相同的索引值时,这似乎不起作用. (4认同)
  • @MaximG 你是什么意思?这也适用于非唯一索引。 (2认同)
  • 对于其他人来说,如果你的数据框是用列标题而不是索引定义的,你可能需要在df.columns中使用''g',例如:`df = pandas.DataFrame({'test':[1,2 ,3,4]},columns = ['a','b','c','d'])` (2认同)
  • 这是恒定时间还是线性的? (2认同)

Eze*_*ick 31

仅供参考,因为它是我正在寻找的东西,你可以通过附加".values"方法测试值或索引中的存在,例如

g in df.<your selected field>.values
g in df.index.values
Run Code Online (Sandbox Code Playgroud)

我发现添加".values"以获得一个简单的列表或ndarray out存在或"in"检查使用其他python工具更顺畅地运行.我以为我会把它扔到那里供人们使用.

  • 这将大大增加查找时间,因为您不是使用 pandas 优化的搜索索引器,而是遍历列表。对格式表示歉意, ```python data = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(10000)] data2 = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(100)] df1 = pd.DataFrame.from_records(data) df2 = pd.DataFrame.from_records(data2) timeit 99999 in df2.index # 442ns timeit 99999 in df1.index # 476ns timeit 99999 in df2.index.values # 3310ns timeit 99999 in df1.index.values # 63900ns ``` (3认同)
  • 嗨,甘克。“字段”应该显示您可以将“.values”方法应用于数据帧的各个字段,例如列或选定的列。“.index”是用可用的实际字段替换“field”的示例:)我想这可能会更清楚...... (2认同)
  • 这点非常有帮助.我有一个分层的情况,其中`in df.index`生成true,`in g in df.index.values`false.有趣. (2认同)

bro*_*000 24

多索引与单个索引有点不同.以下是多索引数据帧的一些方法.

df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3'])
df = df.set_index(['col1', 'col2'])
Run Code Online (Sandbox Code Playgroud)

in df.index 仅在检查单个索引值时才适用于第一级.

'a' in df.index     # True
'X' in df.index     # False
Run Code Online (Sandbox Code Playgroud)

检查df.index.levels其他级别.

'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True
Run Code Online (Sandbox Code Playgroud)

签入df.index索引组合元组.

('a', 'X') in df.index  # True
('a', 'Y') in df.index  # False
Run Code Online (Sandbox Code Playgroud)