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'])
如果有人能帮我,或者指点我去哪里看,我会最伟大的
TIAScipy只能对数值进行线性回归;它不知道如何处理日期。最好的方法可能是将日期转换为数字(如天数、秒数等)。以下是一个示例:
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值列表。这如何与时间戳一起使用??