Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在linregress scipy中使用数据帧中的datetime字段?_Python_Numpy_Scipy - Fatal编程技术网

Python 如何在linregress scipy中使用数据帧中的datetime字段?

Python 如何在linregress scipy中使用数据帧中的datetime字段?,python,numpy,scipy,Python,Numpy,Scipy,当我尝试从数据帧回归日期和关闭字段时,我不断得到错误 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Python34\lib\site packages\scipy\stats\u stats\u mstats\u common.py”>第75行,在linregress中 xmean=np.平均值(x,无) 文件“C:\Python34\lib\site packages\numpy\core\fromneric.py”,第2942行,in>mean out=out,**kw

当我尝试从
数据帧
回归
日期
关闭
字段时,我不断得到
错误

回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Python34\lib\site packages\scipy\stats\u stats\u mstats\u common.py”>第75行,在linregress中 xmean=np.平均值(x,无) 文件“C:\Python34\lib\site packages\numpy\core\fromneric.py”,第2942行,in>mean out=out,**kwargs) 文件“C:\Python34\lib\site packages\numpy\core\u methods.py”,第65行,in>\u ret=umr_和(arr、轴、数据类型、out、keepdims) TypeError:ufunc add无法使用类型为dtype('dtype')的操作数 我正在使用的代码

import openpyxl,os
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import datetime
import pandas_datareader as pdr
from scipy.stats import linregress

start = datetime.datetime(2010,1,1)
end = datetime.datetime(2017,11,10)
i = NSE/CHENNPETRO
df = pdr.DataReader(i, 'quandl', start, end)
# df = df.iloc[::-1]
linregress(df.index,df['Close'])
如果有人能帮我,或者指点我去哪里看,我会最伟大的


TIA

Scipy只能对数值进行线性回归;它不知道如何处理日期。最好的方法可能是将日期转换为数字(如天数、秒数等)。以下是一个示例:

import pandas as pd
import numpy as np

data = pd.DataFrame({'x': np.arange(1000) + np.random.randn(1000)},
                    index=pd.date_range('2012', periods=1000, freq='D'))
data.head()
#  x
# 2012-01-01 -0.475795
# 2012-01-02 -0.222100
# 2012-01-03  2.494785
# 2012-01-04  3.237799
# 2012-01-05  4.412078
现在我们可以使用pandas查找自第一个索引以来的天数:

# compute days since the first date in the index
delta = (data.index - data.index[0])
days = delta.days
根据您的数据,使用小时、分钟、秒等可能更有意义

以此作为输入,线性回归将起作用:

from scipy.stats import linregress
linregress(days, data.x)
# LinregressResult(slope=0.99979977545856191, intercept=0.085015417311694819, rvalue=0.99999344600423345, pvalue=0.0, stderr=0.00011458241597036779)

我想在这里添加使用pandas.to_numeric(args)的可能性,这很有用。@jakevdp-我不理解您的时间增量部分。如果我尝试“seconds=delta.seconds”,代码将失败。data.index-data.index[0]的结果是返回一个int64值列表。这如何与时间戳一起使用??