3

我在为我的 pandas 数据框获取正确的时间索引时遇到了一些麻烦。

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 函数中的转换器参数调用。

4

1 回答 1

2

假设您有一个csv如下所示的文件:

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

然后使用parse_dates,index_cols和方法date_parser的参数read_csv,可以像这样构造一个pandas DataFrame带时间的索引:

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

此答案基于此处提出的类似解决方案。

于 2013-02-28T16:44:22.243 回答