提示词

1
有一个以日期为index的DataFrame,包含某金融产品的成交价,现在需要对其进行ADF检验,请给出示例代码。

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import pandas as pd
from statsmodels.tsa.stattools import adfuller

# 假设原始DataFrame为df,日期为index,包含"成交价"列
# 示例数据准备(可替换为实际数据)
# dates = pd.date_range(start='2023-01-01', end='2025-06-27', freq='D')
# prices = [100 + i*0.5 + 5*np.random.randn() for i in range(len(dates))]
# df = pd.DataFrame({'成交价': prices}, index=dates)


# 执行ADF检验
def adf_test(series):
result = adfuller(series.dropna()) # 自动处理缺失值[5](@ref)
adf_stat = result[0]
p_value = result[1]
critical_values = result[4]

# 格式化输出结果
output = pd.Series({
'ADF Statistic': f"{adf_stat:.4f}",
'p-value': f"{p_value:.4f}",
'1%临界值': critical_values['1%'],
'5%临界值': critical_values['5%'],
'10%临界值': critical_values['10%']
})

# 判断结论
if p_value < 0.05:
output['结论'] = "拒绝原假设,序列平稳"
else:
output['结论'] = "无法拒绝原假设,序列非平稳"

return output

# 调用检验函数
adf_result = adf_test(df['成交价'])
print(adf_result)

我使用了自己的数据,代码都是ai写的,只是注释了模拟数据行。

结果:

1
2
3
4
5
6
7
ADF Statistic          -1.7580
p-value 0.4015
1%临界值 -3.433854
5%临界值 -2.863088
10%临界值 -2.567594
结论 无法拒绝原假设,序列非平稳
dtype: object