Проблема модели регрессии временного ряда - PullRequest
0 голосов
/ 12 июня 2018

Я новичок в Python, пытаюсь создать модель регрессии временных рядов.У меня есть 3 столбца, X, Y и дата.Я импортировал все ниже, но я застреваю с ошибкой.

import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 15, 6
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.tsa.stattools import adfuller
raw_data = pd.read_csv("IMF and BBG Fair Values.csv")
ISO_TH = raw_data[["IMF_VALUE", "BBG_FV", "IMF_DATE"]]

Фильтрация для избавления от NaaN

filtered_TH = ISO_TH[np.isfinite(raw_data['BBG_FV'])]

Я получаю эту ошибку

C: \ Program Files \ Anaconda3 \ lib \ site-packages \ pandas \core \ generic.py: 2698: SettingWithCopyWarning: пытается установить значение для копии фрагмента из DataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение

См. Предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self [name] = значение

1 Ответ

0 голосов
/ 12 июня 2018

Ваша проблема имеет точно такое же происхождение, как написано в документации на панд, которую вы связали.Посмотрите на минимальный пример, который они там предоставили:

def do_something(df):
   foo = df[['bar', 'baz']]  # Is foo a view? A copy? Nobody knows!
   # ... many lines here ...
   foo['quux'] = value       # We don't know whether this will modify df or not!
   return foo 

Проблема в том, что foo может быть либо копией фрейма данных df, либо представлением.Если это представление, то изменения foo также будут влиять на исходный кадр данных df.Если foo является копией, то строка foo['quux'] = value не повлияет на df.

Как это теперь отразится на вашей проблеме?

Вы начинаете с создания фрейма данныхиз файла *.csv:

raw_data = pd.read_csv("IMF and BBG Fair Values.csv")

Затем вы выбираете столбцы "IMF_VALUE", "BBG_FV", "IMF_DATE" из кадра данных raw_data следующим образом:

ISO_TH = raw_data[["IMF_VALUE", "BBG_FV", "IMF_DATE"]]

Теперь это выглядит очень похоже на вторую строку из документации:

foo = df[['bar', 'baz']]

Является ли ваш ISO_TH представлением или копией raw_data?Мы не сейчас!Так что же произойдет, если мы изменим столбец ISO_TH?raw_data тоже меняется или нет?Мы не делаем сейчас и, следовательно, предупреждаем.

Пример игрушки:

import pandas as pd
import numpy as np
raw_data=pd.DataFrame([[np.inf,22,333,44], [3,4,5,2],[1,2,3,4],[np.inf,0,0,0]],columns=["BBG_FV", "IMF_VALUE", "IMF_DATE", "unused"])
ISO_TH = raw_data[["IMF_VALUE", "BBG_FV", "IMF_DATE"]]
# if we now change ISO_TH, we get a warning
ISO_TH.IMF_VALUE=[0,0,0,0] # SettingWithCopyWarning

Тот факт, что вы создаете промежуточный объект filtered_TH из ISO_TH, здесь ничего не меняет.

Как мы можем решить это?Легко, мы читаем документы и делаем то, что там написано!

ISO_TH = raw_data.loc[:,["IMF_VALUE", "BBG_FV", "IMF_DATE"]]

И продолжить, как и раньше.

Дополнительная информация: Какие правила использует Pandas для создания представления против копии?

...