как проверить, существует ли запись фрейма данных pandas по (индексу, столбцу)

#python #pandas

#python #pandas

Вопрос:

Я искал и искал, но не могу найти, как проверить, существует ли запись фрейма данных pandas по (индексу, столбцу).

например:

 import pandas
df = pandas.DataFrame()

df.ix['apple', 'banana'] = 0.1
df.ix['apple', 'orange'] = 0.1
df.ix['kiwi', 'banana'] = 0.2
df.ix['kiwi', 'orange'] = 0.7

df
       banana  orange
apple     0.1     0.1
kiwi      0.2     0.7
  

Теперь я хочу проверить, существует ли запись

 if (["apple", "banana"] in df)
  

.. должно быть True

и

 if (["apple", "apple"] in df)
  

.. должно быть False


На самом деле причина, по которой я тестирую существование, заключается в том, что следующее не работает

 some loop ..
    df[wp]  = some_value
    pass
  

Сбой происходит, когда df [wp] не существует. Это работает, если выражение

 some loop ..
    df[wp]  = some_value
    pass
  

потому что у pandas есть идея расширения массива путем присваивания.

Ответ №1:

Вы можете проверить наличие в индексе и столбцах:

 ('kiwi' in df.index) and ('apple' in df.columns)
  

Или вы можете использовать блок try / except:

 try:
    df.ix['kiwi', 'apple']  = some_value
except KeyError:
    df.ix['kiwi', 'apple'] = some_value
  

Обратите внимание, что формы фреймов данных не должны быть динамическими. Это может сильно замедлить ваши операции. Поэтому, возможно, было бы лучше сделать это со словарями и, наконец, превратить их в фреймы данных.