Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查数据帧索引中是否存在值_Python_Pandas_Ipython - Fatal编程技术网

Python 检查数据帧索引中是否存在值

Python 检查数据帧索引中是否存在值,python,pandas,ipython,Python,Pandas,Ipython,我相信有一个明显的方法可以做到这一点,但现在想不出任何巧妙的方法 基本上,我不想引发异常,而是想得到True或False以查看pandasdf索引中是否存在值 import pandas as pd df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d']) df.loc['g'] # (should give False) 我现在所做的工作如下 sum(df.index == 'g') 这应该能奏效 'g' in df.i

我相信有一个明显的方法可以做到这一点,但现在想不出任何巧妙的方法

基本上,我不想引发异常,而是想得到
True
False
以查看pandas
df
索引中是否存在值

import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g']  # (should give False)
我现在所做的工作如下

sum(df.index == 'g')

这应该能奏效

'g' in df.index

仅供参考,因为这是我一直在寻找的东西,您可以通过添加“.values”方法来测试值或索引中是否存在

g in df.<your selected field>.values
g in df.index.values
df.值中的g

g以df.index.value表示

我发现,添加“.values”以获得一个简单的列表或ndarray,可以使exist或“in”检查与其他python工具一起运行得更顺畅。我想我会把它扔给人们。

多索引的工作原理与单索引略有不同。下面是一些用于多索引数据帧的方法

df = pandas.DataFrame({'g':[1]}, index=['isStop'])

#df.loc['g']

if 'g' in df.index:
    print("find g")

if 'isStop' in df.index:
    print("find a") 
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'])
df.index中的
仅在检查单个索引值时对第一级有效

'a' in df.index     # True
'X' in df.index     # False
检查
df.index.levels
了解其他级别

'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True
df.index
中检查索引组合元组

('a', 'X') in df.index  # True
('a', 'Y') in df.index  # False

使用数据帧:df_数据

>>> df_data
  id   name  value
0  a  ampha      1
1  b   beta      2
2  c     ce      3
我试过:

getattr(df_数据,'value').isin([1]).any() 真的 >>>getattr(df_数据,'value').isin(['1']).any() 真的
但是:

getattr中的1(df_数据“值”) 真的 >>>getattr中的“1”(df_数据“值”) 假的
非常有趣:下面的D

代码不打印布尔值,但允许按索引进行数据帧子集设置。。。我知道这可能不是解决问题的最有效方法,但我(1)喜欢这种读取方式,(2)您可以轻松地将df1索引存在于df2中的位置子集:

df3 = df1[df1.index.isin(df2.index)]
或者在df2中不存在df1索引的情况下

df3 = df1[~df1.index.isin(df2.index)]

任何(df.index='g')怎么办?当多个条目共享相同的索引值时,这似乎不起作用。@maxing什么意思?这也适用于非唯一索引。也适用于多索引。如果您的索引具有长度
n
,则可以检查
1..n
中任意长度的元组。如果您的数据帧是用列标题而不是索引定义的,则可能需要在df.columns中使用
'g',例如:
df=pandas.dataframe({'test':[1,2,3,4]},columns=['a','b','c','d'])
这是常数时间还是线性?但AttributeError:“DataFrame”对象没有属性“field”Hi Gank。“字段”应该显示您可以将“.values”方法应用于数据帧的各个字段,例如列或所选列。“.index”是用可用的实际字段替换“field”的一个示例:)我想这可能更清楚……指出这一点非常有帮助。我有一个分层案例,其中df.index中的
生成true,df.index.values中的
生成false。有趣。@watsonic-一个警告点是,看看其中一个是否由于层次结构而返回元组。确保查看两者的输出内容(例如,在ipython或命令行中),以确保您了解所比较的内容。使用层次索引可以做的另一件事是df.index.get_level_values(),以使事情更容易理解-当然这取决于您的应用程序。isStop是什么?
isin
不会检查数据类型
df['value'].isin([True]).any()
试试这个,它也会给出True,因为它与
1
匹配<代码>正确->1