在Python中为Pandas DataFrame获取时间索引

3 投票
1 回答
6427 浏览
提问于 2025-04-17 17:21

我在处理我的 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 函数的 converters 参数中调用它。

1 个回答

2

假设你有一个 csv 文件,内容大概是这样的:

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

然后,使用 read_csv 方法中的 parse_datesindex_colsdate_parser 参数,你可以创建一个带有时间索引的 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

这个答案是基于一个类似的解决方案,详细信息可以在这里找到:这里

撰写回答