개발/Python

[파이썬] pandas 데이터 프레임 인덱스에 값이 있는지 확인하는 방법

MinorMan 2022. 12. 7. 20:27
반응형

<질문>

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

기본적으로 예외를 제기하는 대신 내가 얻고 싶습니다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>

이것은 트릭을 수행해야합니다

'g' in df.index

<답변2>

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

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

<답변3>

내가 찾던 것이므로 참조용으로 ".values" 메서드를 추가하여 값이나 인덱스 내 존재 여부를 테스트할 수 있습니다. 예:

g in df..values
g in df.index.values

간단한 목록을 얻기 위해 ".values"를 추가하거나 ndarray out이 존재하거나 "in" 검사가 다른 파이썬 도구와 함께 더 원활하게 실행된다는 것을 알았습니다. 사람들을 위해 저걸 버릴 줄 알았는데.


<답변4>

아래 코드는 부울을 인쇄하지 않지만 인덱스별로 데이터 프레임 부분 집합화를 허용합니다... 이것이 문제를 해결하는 가장 효율적인 방법이 아니라는 것을 이해하지만 저는 (1) 이것이 읽는 방식이 마음에 들고 (2) 쉽게 부분 집합화할 수 있습니다 여기서 df1 색인은 df2에 있습니다.

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

또는 df1 인덱스가 df2에 존재하지 않는 경우...

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

<답변5>

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


<답변6>

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

<답변7>

나는 사용하는 것을 좋아합니다:

if 'value' in df.index.get_level_values(0):
    print(True)

get_level_values이 방법은 색인이 단순하든 복합적이든 상관없이 색인에서 값을 얻을 수 있기 때문에 좋습니다.

데이터 프레임에 단일 인덱스가 있는 경우 0(영)을 사용합니다. [또는 여러 인덱스 수준에서 첫 번째 인덱스를 확인하려는 경우]. 두 번째 색인에 1을 사용하는 식으로...

반응형