【问题标题】:Getting a time index in python for pandas dataframe在python中为熊猫数据框获取时间索引
【发布时间】:2013-02-27 19:33:19
【问题描述】:

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

【问题讨论】:

    标签: python pandas dataframe financial datetimeindex


    【解决方案1】:

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

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

    然后使用read_csv方法的parse_datesindex_colsdate_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

    【讨论】:

    • 我猜缺少零不会搞砸 %H
    猜你喜欢
    • 2021-03-17
    • 2021-01-19
    • 2021-11-11
    • 1970-01-01
    • 2015-04-15
    • 2022-07-10
    • 2020-05-11
    • 2022-08-07
    • 2020-01-14
    相关资源
    最近更新 更多