У меня есть датафрейм в пандах, где каждый столбец имеет различный диапазон значений. Например:
ДФ:
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
Любая идея, как я могу нормализовать столбцы этого кадра данных, где каждое значение находится между 0 и 1?
Мой желаемый результат:
A B C
1 1 1
0.765 0.5 0.7
0.8 0.7 0.18(which is 0.09/0.5)
ddof
спора?Ответы:
Вы можете использовать пакет sklearn и связанные с ним утилиты предварительной обработки для нормализации данных.
Для получения дополнительной информации см. Документацию scikit-learn по предварительной обработке данных: масштабирование функций до диапазона.
источник
pd.DataFrame(min_max_scaler.fit_transform(df.T), columns=df.columns, index=df.index)
df=pandas.DataFrame(x_scaled, columns=df.columns)
один простой способ с помощью панд : (здесь я хочу использовать среднюю нормализацию)
использовать нормализацию min-max:
Изменить: Чтобы решить некоторые проблемы, необходимо сказать, что Pandas автоматически применяет функцию колонки в коде выше.
источник
На основании этого поста: /stats/70801/how-to-normalize-data-to-0-1-range
Вы можете сделать следующее:
Вам не нужно беспокоиться о том, являются ли ваши значения отрицательными или положительными. И значения должны быть красиво распределены между 0 и 1.
источник
Ваша проблема на самом деле является простым преобразованием, действующим на столбцы:
Или даже более кратко:
источник
lambda
из них самый лучший :-)axis [...] 0 or 'index': apply function to each column
. На самом деле по умолчаниюaxis=0
это одна строка может быть написана еще короче :-) Спасибо @tschm.Если вам нравится использовать пакет sklearn, вы можете сохранить имена столбцов и индексов, используя pandas
loc
:источник
Простое это красиво:
источник
df["A"] = (df["A"]-df["A"].min()) / (df["A"].max()-df["A"].min())
df /= df.max()
- при условии, что цель состоит в нормализации каждого столбца в отдельности.Вы можете создать список столбцов, которые вы хотите нормализовать
Ваш Pandas Dataframe теперь нормализуется только в тех столбцах, которые вы хотите
Однако , если вы хотите наоборот , выберите список столбцов, которые вы не хотите нормализовать, вы можете просто создать список всех столбцов и удалить эти ненужные
источник
Я думаю, что лучший способ сделать это в пандах это просто
Изменить Если в вашем фрейме данных присутствуют отрицательные числа, вы должны использовать вместо
источник
Решение, данное Sandman и Praveen, очень хорошо. Единственная проблема в том, что если у вас есть категориальные переменные в других столбцах вашего фрейма данных, этот метод потребует некоторых настроек.
Мое решение этой проблемы заключается в следующем:
источник
Пример различных стандартизаций в Python.
Для справки посмотрите эту статью в Википедии: https://en.wikipedia.org/wiki/Unbiased_estima_of_standard_deviation
Пример данных
Нормализация с использованием панд (дает объективные оценки)
При нормализации мы просто вычитаем среднее и делим на стандартное отклонение.
Нормализация с использованием sklearn (дает необъективные оценки, отличные от панд)
Если вы сделаете то же самое с
sklearn
вами, вы получите РАЗНЫЕ выходные данные!Делают ли предвзятые оценки sklearn машинное обучение менее мощным?
NO.
Официальная документация sklearn.preprocessing.scale гласит, что использование смещенной оценки НЕДОПУСТИМО, чтобы повлиять на производительность алгоритмов машинного обучения, и мы можем безопасно их использовать.
Как насчет MinMax Scaling?
В масштабировании MinMax нет расчета стандартного отклонения. Таким образом, результат одинаков как для панд, так и для учёных.
источник
Возможно, вы захотите, чтобы некоторые столбцы были нормализованы, а другие не изменились, как некоторые из задач регрессии, при которых метки данных или категориальные столбцы не изменились. Поэтому я предлагаю вам этот питонический способ (это комбинация ответов @shg и @Cina):
источник
Это всего лишь простая математика. Ответ должен быть простым, как показано ниже.
источник
Из документа панд структура DataFrame может применить операцию (функцию) к себе.
Вы можете применить пользовательскую функцию для работы с DataFrame.
источник
Следующая функция вычисляет Z балл:
источник
Вот как вы делаете это по столбцам, используя понимание списка:
источник
Вы можете просто использовать функцию pandas.DataFrame.transform 1 следующим образом:
источник
источник
Вы можете сделать это в одну строку
он принимает среднее значение для каждого столбца, а затем вычитает его (среднее значение) из каждой строки (среднее значение для конкретного столбца вычитает только из его строки) и делит только среднее значение. Наконец, мы получаем нормализованный набор данных.
источник
Pandas выполняет колоночную нормализацию по умолчанию. Попробуйте код ниже.
Выходные значения будут в диапазоне от 0 до 1.
источник