2014-05-08 30 views
50

Tôi chắc chắn có một cách rõ ràng để thực hiện việc này nhưng không thể nghĩ ra bất kỳ điều gì bị xóa ngay bây giờ.Kiểm tra xem giá trị có tồn tại trong chỉ mục khung dữ liệu gấu trúc

Về cơ bản thay vì tăng ngoại lệ, tôi muốn nhận được True hoặc False để xem liệu giá trị có tồn tại trong chỉ mục gấu trúc df hay không.

df = pandas.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d']) 

df.loc['g'] # (should give False) 

Những gì tôi đã làm việc bây giờ là sau

sum(df.index == 'g') 
+1

Còn về bất kỳ (df.index == 'g') thì sao? – luffe

Trả lời

101

này nên làm các trick

'g' in df.index 
+2

Điều này dường như không hoạt động khi nhiều mục nhập chia sẻ cùng một giá trị chỉ mục. – MaximG

+0

@MaximG Ý của bạn là gì? Điều này cũng làm việc cho một chỉ mục không phải duy nhất. – joris

+0

Cũng hoạt động cho nhiều chỉ mục. Nếu chỉ mục của bạn có độ dài 'n', thì một tuple có độ dài bất kỳ từ' 1.'n' có thể được kiểm tra –

21

Chỉ cần để tham khảo vì nó là một cái gì đó tôi đang tìm kiếm, bạn có thể kiểm tra sự hiện diện trong các giá trị hoặc chỉ mục bằng cách gắn thêm phương thức ".values", vd

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

Tôi thấy rằng việc thêm ".values" để có được danh sách đơn giản hoặc không thực hiện tồn tại hoặc "trong" kiểm tra chạy trơn tru hơn với các công cụ python khác. Chỉ nghĩ rằng tôi sẽ ném nó ra cho mọi người.

+0

nhưng AttributeError: đối tượng 'DataFrame' không có thuộc tính 'field' – Gank

+1

Hi Gank. "Trường" được cho là hiển thị, bạn có thể áp dụng phương thức ".values" cho các trường khác nhau của khung dữ liệu như cột hoặc cột được chọn. ".index" là ví dụ về việc thay thế "trường" bằng trường thực tế có sẵn :) Tôi đoán điều đó có thể rõ ràng hơn ... –

+1

Điều này thực sự hữu ích để chỉ ra. Tôi có một trường hợp phân cấp trong đó 'in g trong df.index' tạo ra true và' in g in df.index.values' false. Hấp dẫn. – watsonic

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

Nhiều chỉ mục hoạt động hơi khác một chút so với chỉ mục duy nhất. Dưới đây là một số phương pháp cho dataframe đa chỉ mục.

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 chỉ hoạt động ở cấp độ đầu tiên khi kiểm tra giá trị chỉ mục duy nhất.

'a' in df.index  # True 
'X' in df.index  # False 

Kiểm tra df.index.levels cho các cấp khác.

'a' in df.index.levels[0] # True 
'X' in df.index.levels[1] # True 

Kiểm tra df.index để có bộ tổ hợp chỉ mục.

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

Tôi không nghĩ '.tolist()' là cần thiết ... –

+0

@JaeyoungChun, bạn là chính xác. Tôi đã chỉnh sửa câu trả lời. Cảm ơn. – broccoli2000

Các vấn đề liên quan