Как заменить отрицательные числа в кадре данных Pandas на ноль

Я хотел бы знать, есть ли способ заменить все отрицательные числа DataFrame нулями?

3 Solutions collect form web for “Как заменить отрицательные числа в кадре данных Pandas на ноль”

Если все ваши столбцы являются числовыми, вы можете использовать булевское индексирование:

 In [1]: import pandas as pd In [2]: df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1]}) In [3]: df Out[3]: ab 0 0 -3 1 -1 2 2 2 1 In [4]: df[df < 0] = 0 In [5]: df Out[5]: ab 0 0 0 1 0 2 2 2 1 

Для более общего случая этот ответ показывает частный метод _get_numeric_data :

 In [1]: import pandas as pd In [2]: df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1], 'c': ['foo', 'goo', 'bar']}) In [3]: df Out[3]: abc 0 0 -3 foo 1 -1 2 goo 2 2 1 bar In [4]: num = df._get_numeric_data() In [5]: num[num < 0] = 0 In [6]: df Out[6]: abc 0 0 0 foo 1 0 2 goo 2 2 1 bar 

С типом timedelta логическое индексирование, по-видимому, работает с отдельными столбцами, но не по всему кадру данных. Таким образом, вы можете:

 In [1]: import pandas as pd In [2]: df = pd.DataFrame({'a': pd.to_timedelta([0, -1, 2], 'd'), ...: 'b': pd.to_timedelta([-3, 2, 1], 'd')}) In [3]: df Out[3]: ab 0 0 days -3 days 1 -1 days 2 days 2 2 days 1 days In [4]: for k, v in df.iteritems(): ...: v[v < 0] = 0 ...: In [5]: df Out[5]: ab 0 0 days 0 days 1 0 days 2 days 2 2 days 1 days 

Обновление: сравнение с pd.Timedelta работает на целом DataFrame:

 In [1]: import pandas as pd In [2]: df = pd.DataFrame({'a': pd.to_timedelta([0, -1, 2], 'd'), ...: 'b': pd.to_timedelta([-3, 2, 1], 'd')}) In [3]: df[df < pd.Timedelta(0)] = 0 In [4]: df Out[4]: ab 0 0 days 0 days 1 0 days 2 days 2 2 days 1 days 

Еще один лаконичный способ сделать это – pandas.DataFrame.clip .

Например:

 import pandas as pd In [20]: df = pd.DataFrame({'a': [-1, 100, -2]}) In [21]: df Out[21]: a 0 -1 1 100 2 -2 In [22]: df.clip(lower=0) Out[22]: a 0 0 1 100 2 0 

Также есть df.clip_lower(0) .

Возможно, вы можете использовать pandas.where(args) так:

 data_frame = data_frame.where(data_frame < 0, 0) 
  • Pandas Python Regex: ошибка: ничего не повторять
  • Как эффективно обрабатывать европейские десятичные разделители с помощью функции pandas read_csv?
  • Суммирование всех столбцов с помощью поиска подстановочных имен с использованием Python Pandas
  • Создание часового / минимального диапазона времени с использованием панд
  • Проблемы с чтением CSV-файла с запятыми и символами в пандах
  • Условная замена в пандах
  •  
    Interesting Posts for Van-Lav

    Ошибка Matplotlib: LaTeX не смог обработать следующую строку: 'lp'

    Как установить контур контура matplotlib по умолчанию, чтобы всегда налагать контуры

    Какая польза добавляется с помощью Gunicorn + Nginx + Flask?

    удалить unicode emoji с помощью re в python

    Как перемещаться по каталогу по дате изменения, не посещая все файлы в каталоге хотя бы один раз в Python

    Замените все слова из списка слов другой строкой в ​​python

    Почему в Python не сообщалось об ошибках многопроцессорности и о том, как включать ошибки отчетности?

    Разница между python sched.scheduler и threading.Timer

    Исходный родитель SQLAlchemy при изменении дочерних изменений

    ModSecurity: выходной фильтр: не удалось прочитать ведро (rc 104): сброс соединения с помощью одноранговой сети

    Каковы методы класса итерации next () и __next __ () for, и в чем разница?

    Есть ли библиотека Python для перечисления простых чисел?

    Удалить имя индекса в пандах

    Воспроизведение аудиофайла с помощью Python

    Не удалось получить доступ к свойству ID из объекта хранилища данных

    Python - лучший язык программирования в мире.