Обходим ошибки обработки пропущенных значений
Ряд операций с датафреймами при наличии отсутствующих значений могут привести к ошибке, так как не знают, как их обрабатывать. В Pandas предусмотрены встроенные средства обхода таких ситуаций. В демонстрационных целях будем использовать следующую таблицу:
df = pd.DataFrame([[0, 'Петрушкин' , 12], [1, 'Укропов', None ], [3, None, 24]], columns=['id', 'fio', 'revenue']) df
Если попытаться умножить значения последнего столбца на число, ошибки не будет, несмотря на NaN:
df['revenue'].map(lambda x: x*10)
В то же время, если попытаться посчитать длину элементов второго столбца, то ошибка возникнет:
df['fio'].map(lambda x: len(x))
Для этого случая в методе map предусмотрен параметр na_action, который можно установить в 'ignore' для обхода ошибки:
df['fio'].map(lambda x: len(x), na_action='ignore')
Такой же параметр присутствует в методе applymap, который работает на уровне всего датафрейма, а не только одного столбца:
df.applymap(lambda x: x*2, na_action='ignore')
Без использования этого параметра мы бы столкнулись с ошибкой.
Следует отметить, что для некоторых операций, которые мы осуществляем через универсальный метод map, существуют специализированные аналоги среди векторизованных строковых методов (вызываются через str), которые умеют работать с пропусками, например, len:
df['fio'].str.len()
Однако метод contains в их число не входит:
df[df['fio'].str.contains('Укропов')]
Спасает дело параметр na, который можно задать в False:
df[df['fio'].str.contains('Укропов', na = False)]
Таким образом, если получаете ошибку в результате обработки NaN значений, ищите спасительный параметр либо специализированные методы (как, например, векторизованные).