首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >时序回归模型问题

时序回归模型问题
EN

Stack Overflow用户
提问于 2018-06-13 01:32:19
回答 1查看 85关注 0票数 0

我是Python的新手,正在尝试做一个时间序列回归模型。我有3列: X、Y和日期。我导入了下面的所有内容,但我遇到了一个错误。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
filtered_TH = ISO_TH[np.isfinite(raw_data['BBG_FV'])]

我得到了这个错误

C:\Program Files\Anaconda3\lib\site-packages\pandas\core\generic.py:2698: SettingWithCopyWarning:正在尝试对DataFrame中切片的副本设置值。尝试使用值,col_indexer = .locrow_indexer

请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy自名称=值

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 04:24:48

您的问题与您链接的pandas文档中的问题具有完全相同的根源。看看他们在那里提供的最小示例:

代码语言:javascript
运行
复制
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文件创建数据帧开始:

代码语言:javascript
运行
复制
raw_data = pd.read_csv("IMF and BBG Fair Values.csv")

然后,通过以下方式从dataframe raw_data中选择列"IMF_VALUE“、"BBG_FV”、"IMF_DATE“:

代码语言:javascript
运行
复制
ISO_TH = raw_data[["IMF_VALUE", "BBG_FV", "IMF_DATE"]]

现在,这看起来与文档中的第二行非常相似:

代码语言:javascript
运行
复制
foo = df[['bar', 'baz']]

你的ISO_TH是视图还是raw_data的副本?我们现在不需要了!那么,如果我们更改一列ISO_TH,会发生什么呢?raw_data是否也会发生变化?我们现在不这样做,因此发出了警告。

玩具示例:

代码语言:javascript
运行
复制
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

ISO_TH创建中间对象filtered_TH这一事实在这里不会有任何改变。

我们该如何解决这个问题呢?很简单,我们阅读文档并执行文档中所写的内容!

代码语言:javascript
运行
复制
ISO_TH = raw_data.loc[:,["IMF_VALUE", "BBG_FV", "IMF_DATE"]]

并像以前一样继续。

更多信息:What rules does Pandas use to generate a view vs a copy?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50822739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档