วิธีตรวจสอบว่ามีคอลัมน์หนึ่งใน 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

หากต้องการตรวจสอบว่ามีคอลัมน์ทั้งหมดหรือไม่คุณสามารถใช้set.issubsetเช่นเดียวกับใน:

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

@brianpck ชี้ให้เห็นในความคิดเห็นหรือset([])สามารถสร้างด้วยเครื่องหมายปีกกา

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

ดูคำถามนี้สำหรับการอภิปรายเกี่ยวกับไวยากรณ์ของลอน - ปีกกา

หรือคุณสามารถใช้ list comprehension ดังเช่นใน:

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

11
หรือเพียงแค่{'A', 'B'}.issubset()
brianpck

7

เพียงเพื่อแนะนำวิธีอื่นโดยไม่ใช้ if statement คุณสามารถใช้get()method สำหรับDataFrames ได้ สำหรับการแสดงผลรวมตามคำถาม:

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

DataFrameget วิธีมีพฤติกรรมคล้ายกันเป็นพจนานุกรมหลาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.