2013-02-27 3 views
2

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

ответ

2

Предположим, у вас есть csv файл, который выглядит следующим образом:

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

Затем с помощью parse_dates, index_cols и date_parser параметры read_csv метода, можно было бы построить 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