#python #python-3.x #pandas
#python #python-3.x #pandas
Вопрос:
Мне интересно, есть ли способ пропустить строки, когда я переназначаю значения из числа в строку:
s = pd.Series(np.arange(1,100,1))
Что я пытаюсь сделать, так это получить 1-е и 2-е стандартное отклонение от моих выборочных данных:
s = s.where((s <= s.std() *1) amp; (s >= s.std() *-1), "1_StDev", errors="ignore")
s = s.where((s <= s.std() *2) amp; (s >= s.std() *-2), "2_StDev", errors="ignore")
Но, похоже, мой код по-прежнему возвращает ошибку, несмотря на установку параметра error на "ignore"
.
Кроме того, мне интересно pd.cut
, возможно ли это здесь. Если да, пожалуйста, научите меня, как это сделать.
Комментарии:
1. Ошибка не из
where
. После исключения первой строки естьint
s и"1_StDev"
ins
, которые вы используете для получения новогоstd
во второй строке.2. @Chris, ты прав, поэтому при настройке
errors="ignore"
where метод where не будет игнорировать строку? кроме того, я попытался добавитьs.apply(lambda x: isinstance(x,int))
в микс, но это мне не помогло
Ответ №1:
Здесь вы можете использовать np.select
conditions = [(s <= s.std() *1) amp; (s >= s.std() *-1),
(s <= s.std() *2) amp; (s >= s.std() *-2)]
choices = ["1_StDev", "2_StDev"]
s = pd.Series(np.select(conditions, choices))
Лучше установить значение по умолчанию, как предлагает @Chris, для значений, где условия не совпадают.
s = pd.Series(np.select(conditions, choices, default=s))
Комментарии:
1. Хороший ответ; но я бы добавил
default=s
numpy.select
, чтобы строки, которые не соответствовали условиям, остались нетронутыми 😉
Ответ №2:
Проблема в том, что при вызове второй строки вы уже преобразовали часть ряда в строку, и поэтому при сравнении строки с плавающей точкой возникает ошибка.