如何将rdat/rdataxts文件转换为python pandas原生时间序列文件?

2024-09-29 22:41:20 发布

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

我有一个文件夹,里面有1000多个股票数据的时间序列文件。下面是我在rda中保存时间序列(xts)文件的示例代码。我使用rda/rdata而不是csv,因为文件的保存和加载速度很快,而且与csv相比,rda中的数据压缩也非常好。在

library(quantmod)
AAPL <- getSymbols("AAPL",auto.assign=FALSE)
save(AAPL,file="/home/user/folder/AAPL.rda")

           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2007-01-03     86.29     86.58    81.90      83.80   309579900      10.96015
2007-01-04     84.05     85.95    83.82      85.66   211815100      11.20341
2007-01-05     85.77     86.20    84.40      85.05   208685400      11.12363
2007-01-08     85.96     86.53    85.28      85.47   199276700      11.17857
2007-01-09     86.45     92.98    85.15      92.57   837324600      12.10717
2007-01-10     94.75     97.80    93.45      97.00   738220000      12.68657

我在R中的许多数据分析实验中都使用这些文件,但是现在我正在慢慢地迁移到python(使用pandas),因为它是一种通用语言。有没有办法把我当前的RDAXTS文件转换成PythonPandas的原生文件(h5或pickle,这是最好的格式)而不是再次下载所有的股票数据。我该怎么做?在

编辑

这就是我在python中所做的

^{pr2}$

输出是

     AAPL.Open  AAPL.High   AAPL.Low  AAPL.Close  AAPL.Volume  AAPL.Adjusted
1.0  86.289999  86.579999  81.899999   83.800002  309579900.0      10.960147
2.0  84.050001  85.949998  83.820003   85.659998  211815100.0      11.203415
3.0  85.770000  86.199997  84.400002   85.049997  208685400.0      11.123633
4.0  85.959998  86.529998  85.280003   85.470000  199276700.0      11.178565
5.0  86.450003  92.979999  85.150000   92.570003  837324600.0      12.107169

它在python中将其转换为非时间序列数据集。我应该怎样把它转换成时间序列?在

编辑2:

经过多次寻找和修补,我已经走到了这一步。我试图将rda文件中的UTC变量转换为本地时间

import rpy2.robjects as robjects
import pandas.rpy.common as com
import pandas as pd
import numpy as np

robj=robjects.r['load']("AAPL.rda")

myRData=None
for sets in robj:
   myRData = com.load_data(sets)
   # convert to DataFrame
   if not isinstance(myRData, pd.DataFrame):
       myRData = pd.DataFrame(myRData)

myRData.head(10)      
ts=np.array(robjects.r('attr(AAPL,"index")')).astype(int)

#changing index
myRData.index=pd.to_datetime(ts, utc=True, format='%Y-%m-%d')

myRData.tail(10)

现在的问题是转换后的本地时间索引格式不正确。尾部应该包含最近日期的时间序列,而不是停留在1970年。在

                                     AAPL.Close  AAPL.Volume  AAPL.Adjusted  
1970-01-01 00:00:01.476144+00:00     116.300003   64041000.0     116.300003  
1970-01-01 00:00:01.476230400+00:00  117.339996   37586800.0     117.339996  
1970-01-01 00:00:01.476316800+00:00  116.980003   35192400.0     116.980003  
1970-01-01 00:00:01.476403200+00:00  117.629997   35652200.0     117.629997  
1970-01-01 00:00:01.476662400+00:00  117.550003   23624900.0     117.550003  
1970-01-01 00:00:01.476748800+00:00  117.470001   24553500.0     117.470001  
1970-01-01 00:00:01.476835200+00:00  117.120003   20034600.0     117.120003  
1970-01-01 00:00:01.476921600+00:00  117.059998   24125800.0     117.059998  
1970-01-01 00:00:01.477008+00:00     116.599998   23192700.0     116.599998  
1970-01-01 00:00:01.477267200+00:00  117.650002   23311700.0     117.650002  

Tags: 文件数据importpandascloseas时间序列
1条回答
网友
1楼 · 发布于 2024-09-29 22:41:20

经过数小时的编辑和搜索。我解决了我的问题这个结果代码。欢迎任何建议

import rpy2.robjects as robjects
import pandas.rpy.common as com
import pandas as pd
import numpy as np
from datetime import datetime

#loading external rda file
robj=robjects.r['load']("AAPL.rda")

myRData=None
for sets in robj:
   myRData = com.load_data(sets)
   # convert to DataFrame
   if not isinstance(myRData, pd.DataFrame):
       myRData = pd.DataFrame(myRData)

myRData.tail(10)    

#fetching UTC data from rda file  
ts=np.array(robjects.r('attr(AAPL,"index")')).astype(int)

#converting UTC to local time
d= np.array([])
for t in ts:
    s=datetime.utcfromtimestamp(t)
    d=np.append(s,d)

#sorting datetime 
d=np.sort(d, axis=0)

#changing index
myRData.index=pd.to_datetime(d)

myRData.tail(10)

结果

^{pr2}$

相关问题 更多 >

    热门问题