#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')