如何删除date之前的第一个数字,以便在Python中对此数据集进行重采样?

2024-05-15 22:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

import numpy as np
import math
import pandas as pd
import matplotlib.pyplot as plt
gold = pd.read_csv("CSV.csv")
import datetime as dt

我试着画出黄金价格的平方收益。我的问题是它仍然不想重新取样

现在看起来是这样的:

Date       Open       High        Low      Close  Adj Close  Volume
0   2017-11-15  24.459999  24.850000  24.459999  24.629999  24.629999  120900
1   2017-11-16  24.459999  24.780001  24.459999  24.680000  24.680000  133900
2   2017-11-17  24.559999  25.040001  24.549999  24.969999  24.969999  137100
3   2017-11-20  24.959999  25.059999  24.730000  24.799999  24.799999   61500
4   2017-11-21  24.860001  25.090000  24.549999  25.070000  25.070000   95400
5   2017-11-22  25.180000  25.200001  24.969999  25.010000  25.010000   38800
6   2017-11-24  25.110001  25.110001  24.570000  24.740000  24.740000   35700
7   2017-11-27  24.740000  25.059999  24.740000  24.930000  24.930000   68900
8   2017-11-28  25.030001  25.290001  24.879999  25.219999  25.219999   79100
9   2017-11-29  25.240000  25.860001  24.809999  25.790001  25.790001  139900
10  2017-11-30  26.010000  26.030001  25.480000  25.620001  25.620001  105800
11  2017-12-01  25.709999  25.790001  25.290001  25.670000  25.670000   87800
12  2017-12-04  25.889999  26.059999  25.709999  25.920000  25.920000   66400

gold['sq_log_ret'] = np.log(gold.Close).diff(1)*np.log(gold.Close).diff(1)



gold['sq_log_ret'].resample('W', how='mean').plot.line()
plt.xlabel("time")
plt.ylabel("squared log returns")
plt.title("mean sq_log_ret in two weeks periode")
plt.show()

我得到一个类型错误如下:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'.

我认为这些从0到12的数字是问题所在,但我不知道如何删除大型数据集的这些数字。任何帮助或想法都将不胜感激


Tags: csvimportnumpylogcloseasnpsq
1条回答
网友
1楼 · 发布于 2024-05-15 22:37:14

IIUC,你的数据框里没有索引。根据docs,应该有一个用于重新采样的datetime索引。这就是我所做的,对我有用, 创建了一个转换为熊猫的索引datetime

gold.index = pd.to_datetime(gold.Date)

然后,运行与你相同的代码

gold['sq_log_ret'].resample('W', how='mean').plot.line()
plt.xlabel("time")
plt.ylabel("squared log returns")
plt.title("mean sq_log_ret in two weeks periode")
plt.show()

输出

enter image description here

相关问题 更多 >