2017-02-19 16 views
2

У меня есть время файл серии CSV, который состоит из метки времени и финансовых данных, как это:Преобразование столбца в соответствующую метку времени с помощью панд read_csv

20140804:10:00:13.281486,782.83,443355 
20140804:10:00:13.400113,955.71,348603 

Теперь я хотел бы поставить это в pandas.DataFrame, и разобрать даты до yyyymmddhhmmss, когда я читал в csv. Я искал вокруг потоков, и я вижу людей, использующих модуль datetime, но я довольно новичок в Python, поэтому я не уверен, как использовать этот модуль для синтаксического анализа вышеуказанных данных и для этого в одно и то же время я читать в csv.

Как лучше всего это сделать?

ответ

2

Вы не нужны:

нет заголовка CSV:

import pandas as pd 
from pandas.compat import StringIO 

temp=u""" 
20140804:10:00:13.281486,782.83,443355 
20140804:10:00:13.400113,955.71,348603""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp), 
       #parse first columns 
       parse_dates=[0], 
       #custom parse function 
       date_parser = lambda x: pd.datetime.strptime(x, '%Y%m%d:%H:%M:%S.%f'), 
       #no header of csv 
       header=None) 

print (df) 
          0  1  2 
0 2014-08-04 10:00:13.281486 782.83 443355 
1 2014-08-04 10:00:13.400113 955.71 348603 

print (df.dtypes) 
0 datetime64[ns] 
1   float64 
2    int64 
dtype: object 

заголовок CSV

import pandas as pd 
from pandas.compat import StringIO 

temp=u"""dates,a,b 
20140804:10:00:13.281486,782.83,443355 
20140804:10:00:13.400113,955.71,348603""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp), 
       parse_dates=[0], 
       date_parser = lambda x: pd.datetime.strptime(x, '%Y%m%d:%H:%M:%S.%f')) 

print (df) 
         dates  a  b 
0 2014-08-04 10:00:13.281486 782.83 443355 
1 2014-08-04 10:00:13.400113 955.71 348603  

print (df.dtypes) 
dates datetime64[ns] 
a    float64 
b     int64 
dtype: object 
+0

Вы можете обновить свой вопрос? потому что проблематичный формат комментариев. – jezrael

+0

Спасибо за помощь! Теперь у меня есть данные в форме, как показано выше, но с индексом Timestamp как индексом. Я хотел бы построить каждый столбец (asset_price) и b (units_traded) как временной ряд, поэтому временная метка находится на оси x. Я попытался использовать DataFrame.plot(), но я получаю временные метки, которые простираются далеко за пределы моих данных, поэтому это не имеет смысла; как бы я построил такие данные, как указано выше, как временные ряды? – sjc725

+0

Жесткий вопрос, но кажется, что 'matplotlib' управляет им и создает значение' axis' между минимальным и максимальным значением индекса, может помочь преобразовать значения индекса в 'строки ', например' df.index = df.index.strftime ('% Y -% m-% d ') ', а затем вызывается' df.plot() ' – jezrael