Pandalarda bir sütunun olup olmadığını kontrol etme


274

Panda DataFrame'inde bir sütun olup olmadığını kontrol etmenin bir yolu var mı?

Aşağıdaki DataFrame olduğunu varsayalım:

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

ve hesaplamak istiyorum df['sum'] = df['A'] + df['C']

Ama önce df['A']var olup olmadığını kontrol etmek istiyorum ve eğer değilse, hesaplamak istiyorum df['sum'] = df['B'] + df['C'].

Yanıtlar:


585

Bu çalışacak:

if 'A' in df:

Ama netlik için, muhtemelen şöyle yazardım:

if 'A' in df.columns:

2
if not 'A' in df.columns:aksi takdirde biri kullanabilirsiniz: eğer Amevcut değilse bir operasyon yürütmek içindf
Robvh

81

Bir veya daha fazla sütunun olup olmadığını kontrol etmek için aşağıdakileri kullanabilirsiniz set.issubset:

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

@Brianpck'in bir yorumda belirttiği gibi set([]), alternatif olarak kıvırcık parantezlerle inşa edilebilir,

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

Kıvırcık parantez sözdizimi hakkında bir tartışma için bu soruya bakın .

Veya aşağıdaki gibi bir liste kavrayışı kullanabilirsiniz:

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

11
Veya sadece{'A', 'B'}.issubset()
brianpck

7

İf ifadelerini kullanmadan başka bir yol önermek get()için, DataFrames yöntemini kullanabilirsiniz . Toplamı soruyu temel alarak gerçekleştirmek için:

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

DataFrameGet yöntemi piton sözlükleri gibi benzer davranış vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.