Получение индекса времени в python для кадра данных pandas

У меня возникли проблемы с получением правильного индекса времени для моего кадра данных 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.


person Taylor    schedule 27.02.2013    source источник


Ответы (1)


Предположим, у вас есть файл 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

Этот ответ основан на аналогичном решении предложено здесь.

person abudis    schedule 28.02.2013
comment
я думаю, что отсутствие нулей не портит %H - person Taylor; 02.03.2013