Я использую np.where для проведения логической проверки чисел с плавающей точкой, чтобы определить, является ли значение> или <0. В кадре данных pandas есть значения np.nan из-за вычислений, и мне бы хотелось, чтобы np.whereфункция "игнорировать" строки np.nan - другими словами, сохранить эту строку как np.nan. Как я могу это сделать? </p>
Вот пример с некоторыми фиктивными данными.
import pandas as pd
import numpy as np
#create some dummy data with datetime index
prices = [100, 99, 98, 101, 102, 99]
dates = pd.date_range(start='1/1/2018', end='1/06/2018')
so_df = pd.DataFrame(prices, index=dates)
so_df.columns = ['Close']
#calculate daily % changes
so_df['pct_change'] = so_df.Close.pct_change()
#logic test to determine if pct_change > 0 or not
so_df['greater_zero?'] = np.where(so_df['pct_change'] > 0, 1, 0)
Глядя на фрейм данных, мы можем видеть, что первая строка - это np.nan и все же numyоценивает это как значение меньше нуля, что неверно. Это должно быть просто np.nan.
Close pct_change greater_zero?
2018-01-01 100 NaN 0
2018-01-02 99 -0.010000 0
2018-01-03 98 -0.010101 0
2018-01-04 101 0.030612 1
2018-01-05 102 0.009901 1
2018-01-06 99 -0.029412 0
В документации np.where , похоже, нет встроенного аргумента о том, как обрабатывать значения np.nan. Я также пытался встроить несколько функций np.where, но не смог заставить это работать. Есть еще идеи?