2013-02-27 79 views
2

我在为我的熊猫数据框获取正确的时间索引时遇到了一些问题。在Python中获取熊猫数据帧的时间索引

import pandas as pd 
from datetime import strptime 
import numpy as np 

stockdata = pd.read_csv("/home/stff/symbol_2012-02.csv", parse_dates =[[0,1,2]]) 
stockdata.columns = ['date_time','ticker','exch','salcond','vol','price','stopstockind','corrind','seqnum','source','trf','symroot','symsuffix'] 

我认为问题是时间的东西出现在前三列:年/月/日,小时/分钟/秒,毫秒。另外,如果在中午之前,小时/分钟/秒列将下降第一个零。

print(stockdata['date_time'][0]) 
20120201 41206 300 

print(stockdata['date_time'][50000]) 
20120201 151117 770 

理想情况下,我想确定自己的功能,可以通过在read_csv功能的转换参数来调用。

回答

2

假设你有一个csv文件看起来像这样:

date,time,milliseconds,value 
20120201,41206,300,1 
20120201,151117,770,2 

然后使用parse_datesindex_colsread_csv方法date_parser的参数,可以构建一个pandasDataFrame随时间指数是这样的:

import datetime as dt 
import pandas as pd 
parse = lambda x: dt.datetime.strptime(x, '%Y%m%d %H%M%S %f') 
df = pd.read_csv('test.csv', parse_dates=[['date', 'time', 'milliseconds']], 
       index_col=0, date_parser=parse) 

这产生了:

      value 
date_time_milliseconds   
2012-02-01 04:12:06.300000  1 
2012-02-01 15:11:17.770000  2 

而且df.index

<class 'pandas.tseries.index.DatetimeIndex'> 
[2012-02-01 04:12:06.300000, 2012-02-01 15:11:17.770000] 
Length: 2, Freq: None, Timezone: None 

这个答案是基于类似的解决方案proposed here

+0

我想缺少零不会搞砸%H – Taylor 2013-03-02 17:15:38