小编Col*_*uck的帖子

Pandas DataFrame-使用OLS /线性回归时,“无法从[datetime64 [ns]]到[float64]分配日期时间”

我有一个DataFrame如下:

   Ticker        Date  Close
0    ADBE  2016-02-16  78.88
1    ADBE  2016-02-17  81.85
2    ADBE  2016-02-18  80.53
3    ADBE  2016-02-19  80.87
4    ADBE  2016-02-22  83.80
5    ADBE  2016-02-23  83.07
Run Code Online (Sandbox Code Playgroud)

...等等。该Date列是问题。我正在尝试使用Date列获取列的线性回归Close

ols1 = pd.ols(y=ADBE['Close'], x=ADBE['Date'], intercept=True)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [float64]
Run Code Online (Sandbox Code Playgroud)

我尝试了多种方法来消除此错误,例如:

dates_input = ADBE['Date'].values.astype('datetime64[D]')

dates_input = ADBE['Date'].values.astype('float')
Run Code Online (Sandbox Code Playgroud)

第二次dates_input尝试返回的类型为,pandas.core.series.Series但是我仍然收到错误消息。

有谁知道如何使Date列工作并摆脱此TypeError?

python time-series linear-regression dataframe pandas

6
推荐指数
1
解决办法
7048
查看次数

Python - 从线性回归线计算正在进行的1标准偏差

我已经设法获得时间序列数据的线性回归线,这要归功于stackoverflow先前.所以我有以下从python绘制的图/线:

线性回归线

我使用以下代码获得此回归线,最初从csv文件导入价格/时间序列数据:

f4 = open('C:\Users\cost9\OneDrive\Documents\PYTHON\TEST-ASSURANCE FILES\LINEAR REGRESSION MULTI TREND IDENTIFICATION\ES_1H.CSV')    
ES_1H = pd.read_csv(f4)
ES_1H.rename(columns={'Date/Time': 'Date'}, inplace=True)
ES_1H['Date'] = ES_1H['Date'].reset_index()
ES_1H.Date.values.astype('M8[D]')
ES_1H_Last_300_Periods = ES_1H[-300:]
x = ES_1H_Last_300_Periods['Date']
y = ES_1H_Last_300_Periods['Close']
x = sm.add_constant(x)
ES_1H_LR = pd.ols(y = ES_1H_Last_300_Periods['Close'], x = ES_1H_Last_300_Periods['Date'])
plt.scatter(y = ES_1H_LR.y_fitted.values, x = ES_1H_Last_300_Periods['Date'])
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是能够绘制/识别回归线的1个标准偏差(如上图所示).上面的大部分代码只是为了使数据符合成功能够绘制回归线 - 更改日期/时间数据,使其在ols公式中工作,将数据切断到最后300个周期,依此类推.但我不确定如何从通过线性回归绘制的线中获得1个标准偏差.

理想情况下,我正在寻找的东西看起来像这样:

线性回归通道

...黄线与回归线相差1个标准差.有谁知道如何从线性回归线得到1个标准偏差?作为参考,这里是线性回归的统计数据:

线性回归统计

编辑:这里的参考是我最终做的:

plt.scatter(y = ES_1D_LR.y_fitted.values, x = ES_1D_Last_30_Periods['Date'])
plt.scatter(y = ES_1D_Last_30_Periods.Close, x = ES_1D_Last_30_Periods.Date)
plt.scatter(y = ES_1D_LR.y_fitted.values - np.std(ES_1D_LR.y_fitted.values), x = ES_1D_Last_30_Periods.Date)
plt.scatter(y = ES_1D_LR.y_fitted.values + np.std(ES_1D_LR.y_fitted.values), x = ES_1D_Last_30_Periods.Date) …
Run Code Online (Sandbox Code Playgroud)

python datetime linear-regression dataframe pandas

5
推荐指数
1
解决办法
1724
查看次数

Pandas 检查最后 N 行的值,根据结果创建新列

我有一个数据框,Df2. 我正在尝试检查下面一列的最后 10 行中的每一行Lead_Lag- 如果这些行中的任何一行中除了 null 之外还有任何值,那么我想要一个新列Position等于'Y'

def run_HG_AUDUSD_15M_Aggregate():
    Df1 = pd.read_csv(max(glob.iglob(r"C:\Users\cost9\OneDrive\Documents\PYTHON\Daily Tasks\Pairs Trading\HG_AUDUSD\CSV\15M\Lead_Lag\*.csv"), key=os.path.getctime))    
    Df2 = Df1[['Date', 'Close_HG', 'Close_AUDUSD', 'Lead_Lag']]

    Df2['Position'] = ''

    for index,row in Df2.iterrows():
        if Df2.loc[Df2.index.shift(-10):index,"Lead_Lag"].isnull(): 
            continue
        else:
            Df2.loc[index, 'Position'] = "Y"
Run Code Online (Sandbox Code Playgroud)

数据样本如下:

def run_HG_AUDUSD_15M_Aggregate():
    Df1 = pd.read_csv(max(glob.iglob(r"C:\Users\cost9\OneDrive\Documents\PYTHON\Daily Tasks\Pairs Trading\HG_AUDUSD\CSV\15M\Lead_Lag\*.csv"), key=os.path.getctime))    
    Df2 = Df1[['Date', 'Close_HG', 'Close_AUDUSD', 'Lead_Lag']]

    Df2['Position'] = ''

    for index,row in Df2.iterrows():
        if Df2.loc[Df2.index.shift(-10):index,"Lead_Lag"].isnull(): 
            continue
        else:
            Df2.loc[index, 'Position'] = "Y"
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,我希望新列的最后两个值与该列中至少最后 10 行之一的值相同Position。我想滚动应用它 - …

python loops shift dataframe pandas

5
推荐指数
1
解决办法
4487
查看次数

熊猫OLS-拉参数不起作用

我的Pandas OLS代码行正常运行,但是无法拉出要在其他相关函数中使用的参数:

ES_15M_LR = pd.ols(y = ES_15M_Last_300_Periods['Close'], x = ES_15M_Last_300_Periods['Date'])
Run Code Online (Sandbox Code Playgroud)

上面的代码很好用,但是当我尝试从中提取参数时,我得到了错误:

AttributeError: 'OLS' object has no attribute 'params' 
Run Code Online (Sandbox Code Playgroud)

例如,我尝试过:

ES_15M_LR.params
Run Code Online (Sandbox Code Playgroud)

以及:

ES_15M_LR.params.x
Run Code Online (Sandbox Code Playgroud)

...拉x系数(斜率)。那将得到与上述相同的错误。但是,我可以看到统计数据按预期运行:

在此处输入图片说明

我只是似乎无法自动提取参数,而我需要将其作为其他函数的变量。有人可以协助吗?

python linear-regression dataframe pandas

2
推荐指数
1
解决办法
998
查看次数

带有 If 语句的 Python DataFrames For 循环不起作用

我有一个名为 ES_15M_Summary 的数据帧,在标题为 ES_15M_Summary['Rolling_OLS_Coefficient'] 的列中具有系数/beta,如下所示:

“Rolling_OLS_Coefficient”列

如果上图中的列 ('Rolling_OLS_Coefficient') 的值大于 0.08,我希望名为 'Long' 的新列是二进制 'Y'。如果另一列中的值小于 0.08,我希望该值是 'NaN' 或只是 'N'(任何一种都有效)。

所以我正在写一个 for 循环来运行列。首先,我创建了一个名为“Long”的新列并将其设置为 NaN:

ES_15M_Summary['Long'] = np.nan
Run Code Online (Sandbox Code Playgroud)

然后我做了以下 For 循环:

for index, row in ES_15M_Summary.iterrows():
    if ES_15M_Summary['Rolling_OLS_Coefficient'] > .08:
        ES_15M_Summary['Long'] = 'Y'
    else:
        ES_15M_Summary['Long'] = 'NaN'
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 
Run Code Online (Sandbox Code Playgroud)

...参考上面显示的 if 语句行 (if.​​..>.08:)。我不确定为什么我会收到这个错误或者 for 循环有什么问题。任何帮助表示赞赏。

python for-loop dataframe pandas

1
推荐指数
1
解决办法
1万
查看次数