#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
Обратите внимание, что формы фреймов данных не должны быть динамическими. Это может сильно замедлить ваши операции. Поэтому, возможно, было бы лучше сделать это со словарями и, наконец, превратить их в фреймы данных.