팬더 데이터 프레임 인덱스에 값이 있는지 확인하십시오.


139

나는 이것을 할 수있는 확실한 방법이 있다고 확신하지만 지금은 매끄러운 것을 생각할 수 없습니다.

기본적으로 대신 예외를 발생의 나는 좀하고 싶습니다 True또는 False값이 팬더에 존재하는지 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')

1
어떤 (df.index == 'g')는 어떻습니까?
luffe

답변:


252

이 트릭을해야합니다

'g' in df.index

7
여러 항목이 동일한 색인 값을 공유하는 경우에는 작동하지 않는 것 같습니다.
MaximG

2
@MaximG 무엇을 의미합니까? 이것은 고유하지 않은 인덱스에서도 작동합니다.
joris

다중 인덱스에서도 작동합니다. 색인의 길이 n가이면 모든 길이의 튜플을 1..n확인할 수 있습니다.
Minh Triet

2
여기에 오는 다른 사람들의 'g' in df.columns경우 데이터 프레임이 색인이 아닌 열 제목으로 정의 된 경우 사용해야 합니다.df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])
Tahlor

2
이 일정한 시간 또는 선형입니까?
Lokesh

36

내가 찾던 것으로 참조하기 위해 ".values"메소드를 추가하여 값 또는 색인 내 존재 여부를 테스트 할 수 있습니다. 예 :

g in df.<your selected field>.values
g in df.index.values

간단한 목록을 얻거나 ndarray를 가져 오기 위해 ".values"를 추가하면 다른 파이썬 도구와 함께 "in"검사가 더 매끄럽게 실행됩니다. 그냥 사람들을 위해 그것을 던질 것이라고 생각했습니다.


그러나 AttributeError : 'DataFrame'객체에는 'field'속성이 없습니다.
Gank

1
안녕 ank. "field"는 열 또는 선택한 열과 같은 데이터 프레임의 다양한 필드에 ".values"메서드를 적용 할 수 있음을 보여주었습니다. ".index"는 "field"를 사용 가능한 실제 필드로 대체하는 예입니다. 더 명확 할 수있을 것 같습니다 ...
Ezekiel Kruglick

2
이것은 실제로 지적하는 데 도움이되었습니다. 나는 in g in df.index참과 in g in df.index.values거짓을 만들어내는 계층 적 사례가 있습니다. 흥미 롭군
watsonic

@watsonic-하나의 계층 구조로 인해 그중 하나가 튜플을 반환하는지 확인해야합니다. 비교하는 내용을 이해하기 위해 둘 다 무엇을 내놓는 지 (예 : ipython 또는 명령 행에서) 확인하십시오. 계층 적 인덱스를 사용하여 수행 할 수있는 또 다른 작업은 df.index.get_level_values ​​(<수준 이름>)입니다. 물론 응용 프로그램에 따라 상황을보다 이해하기 쉽게 만듭니다.
Ezekiel Kruglick

28

다중 인덱스는 단일 인덱스와 약간 다르게 작동합니다. 다중 인덱스 데이터 프레임에 대한 몇 가지 방법이 있습니다.

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'])

in 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

2

DataFrame 사용 : df_data

>>> df_data
  id   name  value
0  a  ampha      1
1  b   beta      2
2  c     ce      3

나는 시도했다 :

>>> getattr(df_data, 'value').isin([1]).any()
True
>>> getattr(df_data, 'value').isin(['1']).any()
True

그러나:

>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False

너무 재미있어 : D


isindtype을 확인하지 않습니다. df['value'].isin([True]).any()시도해보십시오. 또한 일치합니다 1. True -> 1.
Mohamed Thasin ah

1
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") 

Stop이란 무엇입니까?
Nabin

1

아래 코드는 부울을 인쇄하지 않지만 인덱스로 데이터 프레임 하위 집합을 허용합니다 ...이 문제를 해결하는 가장 효율적인 방법은 아니지만 이해합니다 (1)이 방법을 읽고 (2) 쉽게 하위 집합을 만들 수 있습니다 df1 색인이 df2에 존재하는 경우 :

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

또는 df1 색인이 df2에 존재하지 않는 경우 ...

df3 = df1[~df1.index.isin(df2.index)]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.