2014-07-21 32 views
96

Có cách nào để kiểm tra xem cột có tồn tại trong Khung dữ liệu Pandas không?Cách kiểm tra xem cột có tồn tại trong Pandas

Giả sử rằng tôi có DataFrame sau:

>>> import pandas as pd 
>>> from random import randint 
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)], 
         'B': [randint(1, 9)*10 for x in xrange(10)], 
         'C': [randint(1, 9)*100 for x in xrange(10)]}) 
>>> df 
    A B C 
0 3 40 100 
1 6 30 200 
2 7 70 800 
3 3 50 200 
4 7 50 400 
5 4 10 400 
6 3 70 500 
7 8 30 200 
8 3 40 800 
9 6 60 200 

và tôi muốn để tính toán df['sum'] = df['A'] + df['C']

nhưng trước tiên tôi muốn kiểm tra xem df['A'] tồn tại, và nếu không, tôi muốn để tính toán để thay thế.

Cảm ơn sự giúp đỡ.

Trả lời

185

này sẽ làm việc:

if 'A' in df: 

Nhưng cho rõ ràng, tôi muốn có thể viết nó như:

if 'A' in df.columns: 
24

Để kiểm tra xem một hoặc nhiều cột tất cả tồn tại, bạn có thể sử dụng set.issubset , như trong:

if set(['A','C']).issubset(df.columns): 
    df['sum'] = df['A'] + df['C']     

chỉnh sửa: Như @brianpck chỉ ra trong một chú thích, set([]) thể cách khác được xây dựng với dấu ngoặc nhọn:

if {'A', 'C'}.issubset(df.columns): 

Xem this question cho một cuộc thảo luận về cú pháp xoăn-niềng răng.

+5

Hoặc chỉ là '{'A', 'B'}. Issubset()' – brianpck

+0

@brianpck - thêm câu trả lời đó là phương pháp thanh lịch nhất ở đây. – pshep123

3

Chỉ cần đề xuất một cách khác mà không sử dụng nếu câu lệnh, bạn có thể sử dụng phương thức get() cho DataFrame s. Để thực hiện tổng dựa trên câu hỏi:

df['sum'] = df.get('A', df['B']) + df['C'] 

Các DataFrame get phương pháp có hành vi tương tự như từ điển python.

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