Как написать код для лямбда-метода с pandas и случайным образом? - PullRequest
0 голосов
/ 24 марта 2020

Итак, я работаю над этим python кодом, куда я импортировал файл Excel со своего рабочего стола. В настоящее время в моем коде у меня проблемы с выполнением лямбда-функции. Я должен использовать лямбда-функцию в методе apply () для столбца (-ов) данных с выбросами (т. Е. Z-показателями> 3 или <-3), установить значение для выбросов на ноль (т. Е. Np.nan ), в противном случае сохраните исходное значение. Я набираю строку кода 2 разными способами с одинаковым результатом. Однако, когда я проверяю, использует ли мой общий код лямбда-функцию, это не так, и я не знаю, как заставить мой код использовать функцию вместо того, чтобы просто запускать лямбда, как часть общего кода. </p>

Это отдельный массив для каждого типа данных после использования метода unique (). enter image description here Уже заменили строки в массиве

На рисунке показано использование метода sort_value (), использованного в моем коде, а также поиск возможных выбросов для z-показателя переменная перед вводом лямбда-функции в код.

data.SalaryZScores.apply(lambda SalaryZScores:np.nan if SalaryZScores > 3 or SalaryZScores<-3 else SalaryZScores)

Или

data['Salary'] = data['Salary'].apply(lambda Salary: random.randrange(data['Salary'].min(), data['Salary'].max())if pd.isnull(Salary) else Salary)

1 Ответ

0 голосов
/ 24 марта 2020

Трудно понять, что делают ваши фрагменты, поскольку вы не предоставили код для создания каких-либо объектов в вашем вопросе. Если я понимаю, что вы пытаетесь сделать, то следующие подходы могут решить вашу проблему:

Использование .apply() и lambda

import pandas as pd
import numpy as np

# Create some data
data = np.arange(20).reshape(10, 2)
df = pd.DataFrame(data, columns=list('AB'))
df

[Out]
    A   B
0   0   1
1   2   3
2   4   5
3   6   7
4   8   9
5   10  11
6   12  13
7   14  15
8   16  17
9   18  19

df['A'] = df['A'].apply(lambda x : np.nan if (x < 4) or (x > 10) else x)
df
[Out]
      A   B
0   NaN   1
1   NaN   3
2   4.0   5
3   6.0   7
4   8.0   9
5  10.0  11
6   NaN  13
7   NaN  15
8   NaN  17
9   NaN  19

Использование Series.between:

df['A'].between(4, 10) # Creates a boolean mask between 4 and 10
[Out]
    A
0   False
1   False
2   True
3   True
4   True
5   True
6   False
7   False
8   False
9   False

df['A'][~df['A'].between(4, 10)] = np.nan # Uses ~ to invert the boolean mask and set values to np.nan
df
[Out]
      A   B
0   NaN   1
1   NaN   3
2   4.0   5
3   6.0   7
4   8.0   9
5  10.0  11
6   NaN  13
7   NaN  15
8   NaN  17
9   NaN  19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...