2013-02-27 4 views
2

J'ai un peu de mal à trouver le bon indice de temps pour mes données pandas.Obtenir un index de temps en python pour les pandas dataframe

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'] 

Je pense que le problème est que les choses de temps vient dans les trois premières colonnes: année/mois/jour, heure/minute/seconde, milliseconde. De plus, la colonne heure/minute/seconde laisse tomber le premier zéro si c'est avant midi.

print(stockdata['date_time'][0]) 
20120201 41206 300 

print(stockdata['date_time'][50000]) 
20120201 151117 770 

Idéalement, je voudrais définir ma propre fonction qui pourrait être appelé par l'argument des convertisseurs dans la fonction read_csv.

Répondre

2

Supposons que vous ayez un fichier csv qui ressemble à ceci:

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

Ensuite, en utilisant parse_dates, index_cols et date_parser paramètres de la méthode read_csv, on pourrait construire un pandasDataFrame avec un indice de temps comme celui-ci:

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) 

Cela donne:

      value 
date_time_milliseconds   
2012-02-01 04:12:06.300000  1 
2012-02-01 15:11:17.770000  2 

Et 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 

Cette réponse est basée sur une solution similaire proposed here.

+0

Je suppose que le manque de zéros ne gâche pas% H – Taylor

Questions connexes