2013-03-17 44 views
1
from StringIO import StringIO 
import datetime as dt 
import pandas as pd 

def addtime(temp): 
    temp = (temp) + (dt.timedelta(hours =16)) 
    return(temp) 

data = """\ 
    '12-31-2012',5100, 5200 
    '01/1/2013',5300,5400""" 

tdata = pd.read_csv(StringIO(data), 
    names = ['date', 'field1', 'field'], index_col = None, 
    parse_dates =['date'], header= None) 

print tdata 

old_date = tdata.ix[0,'date'] 
print 'old date =',old_date 
new_date = addtime(old_date) 
print 'new date =',new_date 

#     date field1 field 
#0 2012-12-31 00:00:00 5100 5200 
#1 2013-01-01 00:00:00 5300 5400 
#old date = 2012-12-31 00:00:00 
#new date = 2012-12-31 16:00:00 

我想爲每個日期添加16個小時作爲Pandas CSV閱讀器的一部分。但我無法弄清楚如何添加「parse_dates =」的工作。示例代碼正確執行操作,而不是以所需的方式。幫助將不勝感激。pandas csv閱讀器中的日期轉換

回答

4

使用date_parser參數。通常情況下,默認爲dateutil.parser.parse,但您可以指定一個自定義函數(如下面的addtime),該函數不僅解析日期字符串,而且還添加timedelta

from StringIO import StringIO 
import datetime as dt 
import pandas as pd 
import dateutil.parser as parser 

def addtime(temp): 
    temp = parser.parse(temp) + dt.timedelta(hours=16) 
    return temp 

data = """\ 
    '12-31-2012',5100, 5200 
    '01/1/2013',5300,5400""" 

tdata = pd.read_csv(StringIO(data), 
    names = ['date', 'field1', 'field'], index_col = None, 
    parse_dates =['date'], header= None, date_parser=addtime) 

print tdata 

產生

    date field1 field 
0 2012-12-31 16:00:00 5100 5200 
1 2013-01-01 16:00:00 5300 5400 
+0

謝謝你,我沒有得到/使用正確的形式爲您添加到更新時間解析器聲明。 – 2013-03-17 21:07:33