У кого-нибудь были проблемы с скользящими стандартными отклонениями, которые не работали только с одним столбцом в кадре данных pandas?
У меня есть фреймворк с индексом datetime и соответствующими финансовыми данными. Когда я запускаю df.rolling (). Std () (псевдокод, см. Ниже), я получаю правильные данные для всех столбцов, кроме одного. Этот столбец возвращает 0 там, где должны быть значения стандартного отклонения. Я также получаю ту же ошибку при использовании .rolling_std (), и я получаю сообщение об ошибке при попытке запустить df.rolling (). Skew (), все остальные столбцы работают, и этот столбец дает NaN.
Что меня сбивает с толку в этой ошибке, так это то, что другие столбцы работают правильно, и для этого столбца работает df.rolling (). Mean (). Вдобавок в столбце есть dtype float64, что не должно быть проблемой. Я также проверил и не вижу недостающих данных. Я использую скользящее окно в 30 дней, и если я попытаюсь получить последнее значение стандартного отклонения с помощью series [-30:]. Std (), я получу правильный результат. Так что похоже, что что-то конкретно с подвижной частью не работает. Я поигрался с параметрами .rolling (), но ничего не мог изменить.
# combine the return, volume and slope data
raw_factor_data = pd.concat([fut_rets, vol_factors, slope_factors], axis=1)
# create new dataframe for each factor type (mean,
# std dev, skew) and combine
mean_vals = raw_factor_data.rolling(window=past, min_periods=past).mean()
mean_vals.columns = [column + '_mean' for column in list(mean_vals)]
std_vals = raw_factor_data.rolling(window=past, min_periods=past).std()
std_vals.columns = [column + '_std' for column in list(std_vals)]
skew_vals = raw_factor_data.rolling(window=past, min_periods=past).skew()
skew_vals.columns = [column + '_skew' for column in list(skew_vals)]
fact_data = pd.concat([mean_vals, std_vals, skew_vals], axis=1)
Первая строка объединяет три фрейма данных вместе. Затем я создаю отдельные фреймы данных со скользящим средним, стандартным значением и перекосом (прошлое = 30), а затем объединяю их в один фрейм данных.
Имя столбца, с которым у меня возникли проблемы, - «TY1_slope». Итак, я запустил следующий код, чтобы увидеть, где есть ошибка.
print raw_factor_data['TY1_slope'][-30:].std()
print raw_factor_data['TY1_slope'][-30:].mean()
print raw_factor_data['TY1_slope'].rolling(window=30, min_periods=30).std()
print raw_factor_data['TY1_slope'].rolling(window=30, min_periods=30).mean()
Первые две строки кода выводят правильное стандартное отклонение и среднее значение (0,08 и 0,14). Однако третья строка кода производит нули, а четвертая строка дает точные средние значения (окончательные значения в этих сериях - 0,0 и 0,14).
Если кто-нибудь может помочь с тем, как посмотреть исходный код .rolling, это тоже будет полезно. Я новичок в этом и пробовал следующее, но получил несколько строк, которые не казались очень полезными.
import inspect
import pandas as pd
print inspect.getsourcelines(pd.rolling_std)
rolling(30).apply( lambda x: np.std(x,ddof=1) )
, если это какая-то странная синтаксическая ошибка с прокруткой + std - person JohnE   schedule 30.09.2017