Установите значение ячейки в NaN при определенных условиях, используя лямбда-карту в Pandas

#python #pandas #dictionary #lambda #nan

#python #pandas #словарь #лямбда #nan

Вопрос:

Я пытаюсь изменить значение определенных ячеек в определенном столбце на NaN, если текущее значение ячейки не соответствует определенным условиям.

В частности, у меня есть столбец цен. df[‘цены’] . Значения в этом столбце выглядят следующим образом: [23, 34, 36/375, NA, 62]. Я хотел бы проверить, является ли значение в определенной строке этого столбца цифрой, и, если это не так, измените значение на NaN. Таким образом, результирующий вектор столбца будет [23, 34, NaN, NaN, 62] .

Я пытался использовать итеративный подход, но он слишком медленный / может вообще не работать. Использование lambda и map в Pandas выполняется очень быстро, но я не могу в этом разобраться.

Ответ №1:

Я бы использовал convert_objects здесь:

 In [11]: df = pd.DataFrame([[23], [34], ['36/375'], ['NA'], [62]])

In [12]: df
Out[12]:
        0
0      23
1      34
2  36/375
3      NA
4      62

In [13]: df.convert_objects(convert_numeric=True)
Out[13]:
    0
0  23
1  34
2 NaN
3 NaN
4  62
 

Ответ №2:

Решение Энди работает хорошо. Однако теперь этот метод convert_objects устарел и был удален в версии 0.18 .

Вместо этого используйте pandas.to_numeric() с параметром errors='coerce' :

 columns = [list of clumns to change]

for col in columns:
    df[col] = pd.to_numeric(df[col], errors='coerce')