Làm thế nào để kiểm tra nếu một cột tồn tại trong Pandas


274

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

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 có df['A']tồn tại không, và nếu không, tôi muốn tính toán df['sum'] = df['B'] + df['C']thay thế.

Câu trả lời:


584

Điều này sẽ làm việc:

if 'A' in df:

Nhưng để rõ ràng, có lẽ tôi sẽ viết nó như sau:

if 'A' in df.columns:

2
cách khác xung quanh người ta có thể sử dụng: if not 'A' in df.columns:để thực hiện một thao tác nếu Akhông có trongdf
Robvh

81

Để kiểm tra xem có tồn tại một hoặc nhiều cột hay khôngset.issubset , như trong:

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

Như @brianpck chỉ ra trong một nhận xét, set([])có thể được xây dựng thay thế bằng dấu ngoặc nhọn,

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

Xem câu hỏi này để thảo luận về cú pháp niềng răng xoăn.

Hoặc, bạn có thể sử dụng cách hiểu danh sách, như trong:

if all([item in df.columns for item in ['A','C']]):

11
Hoặc chỉ{'A', 'B'}.issubset()
brianpck

7

Chỉ cần đề xuất một cách khác mà không sử dụng câu lệnh if, bạn có thể sử dụng get()phương thức cho DataFrames. Để 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 DataFramephương pháp get có hành vi tương tự như từ điển python.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.