使用asfreq在tim上只显示一个ticker

2024-10-08 19:26:26 发布

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

我对数据帧的.asfreq部分有问题。我有股票数据的文件名为股票行情。包含数据的文件如下所示:

uri:/instrument/1.0/AAPL/chartdata;type=quote;range=1d/csv
ticker:aapl
Company-Name:Apple Inc.
Exchange-Name:NMS
unit:MIN
timezone:EST
currency:USD
gmtoffset:-18000
previous_close:114.6300
Timestamp:1417617000,1417640400
labels:1417618800,1417622400,1417626000,1417629600,1417633200,1417636800,1417640400
values:Timestamp,close,high,low,open,volume
close:115.1500,116.2500
high:115.2200,116.3500
low:115.1100,116.2000
open:115.1425,116.2450
volume:13400,3646700
1417617011,115.7498,115.8100,115.5707,115.7150,1622500
1417617060,115.6300,115.7500,115.5000,115.7300,284000
1417617179,115.3990,115.6600,115.3600,115.6500,349600
1417617180,115.6050,115.6400,115.3700,115.3990,300400
1417617299,115.7099,115.7700,115.6000,115.6401,279200
…

我有一个函数,它可以随时提取所有的代码(例如[AAPL,NGF15])和拉出类型的数据(例如-'close')(例如-['2014-12-03 15:29:00','2014-12-03 16:31:00']),并在名为data的嵌套字典中更新它。调用函数后,嵌套字典如下所示:

{'AAPL':{'2014-12-03 16:03:00':'115.4200','2014-12-03 15:31:00':'115.6300','2014-12-03 15:51:00':'116.1100','2014-12-03 16:08:00':'115.4100'…},'NGF15':{'2014-12-03 16:02:52':'3.8170','2014-12-03 16:14:58':'3.8000','2014-12-03 15:53:58':'3.8010','2014-12-03 15:33:59':'3.7930','2014-12-03 15:59:58','2014-12-03 16:15:00':'3.8040',…}}

代码如下:

a=DataFrame(data=data)
a.index.name = 'vrime'

数据帧如下所示:

                          AAPL   NGF15
vrime                                
2014-12-03 15:29:59       NaN  3.7870
2014-12-03 15:30:11  115.7498     NaN
2014-12-03 15:30:54       NaN  3.7880
2014-12-03 15:31:00  115.6300     NaN
2014-12-03 15:31:57       NaN  3.7880
2014-12-03 15:32:58       NaN  3.7920
…
2014-12-03 16:21:59  115.5900  3.8090
…

所以我想每15秒改变一次数据的频率,给定时间的价格(比如15:30:15)是每个股票的最后价格。你知道吗

a.index = pd.to_datetime(a.index)
print a.asfreq('15s', method=‘pad',how = {'2014-12-03 15:30:00','2014-12-03 16:30:00'})

所以我的结果是这样的:

                          AAPL   NGF15
2014-12-03 15:29:59       NaN  3.7870
2014-12-03 15:30:14  115.7498     NaN
2014-12-03 15:30:29  115.7498     NaN
2014-12-03 15:30:44  115.7498     NaN
2014-12-03 15:30:59       NaN  3.7880
2014-12-03 15:31:14  115.6300     NaN
2014-12-03 15:31:29  115.6300     NaN
2014-12-03 15:31:44  115.6300     NaN
2014-12-03 15:31:59       NaN  3.7880
2014-12-03 15:32:14       NaN  3.7880

它从15:30:00开始,一次只显示一个股票代码。有什么问题吗?你知道吗

这就是我想要的:

                        AAPL   NGF15
2014-12-03 15:30:15  115.7498  3.7870
2014-12-03 15:30:30  115.7498  3.7870
2014-12-03 15:30:45  115.7498  3.7870
2014-12-03 15:31:00  115.6300  3.7880
2014-12-03 15:31:15  115.6300  3.7880
2014-12-03 15:31:30  115.6300  3.7880
2014-12-03 15:31:45  115.6300  3.7880
2014-12-03 15:32:00  115.6300  3.7880
2014-12-03 15:32:15  115.6300  3.7880

提前谢谢!对不起,如果英语不好!你知道吗


Tags: 数据nameclosedataindexopennantimestamp
1条回答
网友
1楼 · 发布于 2024-10-08 19:26:26

DataFrame.asfreq()documentation表示how关键字的工作方式是“仅针对PeriodIndex”。你知道吗

asfreq()只是resample()的包装。像resample('15s', fill_method='pad')这样的东西应该有用。使用上面的一些简化数据:

In [49]: data
Out[49]:
                         0    1
2014-12-03 15:29:59    NaN  3.7
2014-12-03 15:30:11  115.7  NaN
2014-12-03 15:30:54    NaN  3.8
2014-12-03 15:31:00  115.6  NaN

[4 rows x 2 columns]

In [50]: data.resample('15s', fill_method='pad')
Out[50]:
                         0    1
2014-12-03 15:29:45    NaN  3.7
2014-12-03 15:30:00  115.7  3.7
2014-12-03 15:30:15  115.7  3.7
2014-12-03 15:30:30  115.7  3.7
2014-12-03 15:30:45  115.7  3.8
2014-12-03 15:31:00  115.6  3.8

如果要在15:30:00开始,可以从数据帧中删除第一行。你知道吗

相关问题 更多 >

    热门问题