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
以查看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.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
。