Pandasに列が存在するかどうかを確認する方法


274

Pandas DataFrameに列が存在するかどうかを確認する方法はありますか?

次のDataFrameがあるとします。

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

計算したい df['sum'] = df['A'] + df['C']

しかし、最初にdf['A']存在するかどうかを確認し、存在しない場合はdf['sum'] = df['B'] + df['C']代わりに計算したいと思います。

回答:


585

これは動作します:

if 'A' in df:

しかし、明確にするために、おそらく次のように記述します。

if 'A' in df.columns:

2
逆に、次のものを使用できます:if not 'A' in df.columns:A存在しない場合に操作を実行するdf
Robvh

81

1 つ以上の列がすべて存在するどうかを確認するには、次のようにを使用できますset.issubset

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

@brianpckはコメントで指摘しているset([])ように、中括弧で構成することもできます。

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

中括弧の構文については、この質問を参照してください。

または、次のようにリスト内包表記を使用できます。

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

11
または単に{'A', 'B'}.issubset()
brianpck 16

7

ifステートメントを使用せずに別の方法を提案するにはget()DataFrames のメソッドを使用できます。質問に基づいて合計を実行するには:

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

DataFramegetメソッドはPythonの辞書と同様の動作をします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.