2016-12-16 53 views
1

我有一个表中的数据DATETIME如下面给出:转换为从列

YEAR DOY Hour 
2015 1 0 
2015 1 1 
2015 1 2 
2015 1 3 
2015 1 4 
2015 1 5 

这是我正在读文件:

df = pd.read_table('data2015.lst', sep='\s+') 
lines = len(df) 

要将其转换为datetime对象我做:

dates = [] 
for l in range(0,lines): 
    date = str(df.ix[l,0])[:-2] +' '+ str(df.ix[l,1])[:-2] +' '+ str(df.ix[l,2])[:-2] 
    d = pd.to_datetime(date, format='%Y %j %H') 
    dates.append(d) 

但这需要很多时间。

有没有办法做到这一点(更直接)没有循环?

+0

你正在使用'任何理由[-0]'每个STR? – Psidom

+0

什么是'线条'? – Abdou

+0

由于某些原因,这些字段会得到一个额外的'.0',我删除viia'[:-2]'。也许有一个聪明的办法。 – KcFnMi

回答

1

你可以阅读,当它在一个行做到这一点:

df = pd.read_csv('file.txt', sep='\s+', index_col='Timestamp', 
       parse_dates={'Timestamp': [0,1,2]}, 
       date_parser=lambda x: pd.datetime.strptime(x, '%Y %j %H')) 


Timestamp 
2015-01-01 00:00:00 
2015-01-01 01:00:00 
2015-01-01 02:00:00 
2015-01-01 03:00:00 
2015-01-01 04:00:00 
2015-01-01 05:00:00 
+0

替换它。给我更多关于''Timestamp''的含义的细节,它应该成为'df'中的一个列?我使用print df.columns.values进行了检查,但它不在那里。 – KcFnMi

+1

因为我放了'index_col ='Timestamp'',所以它变成了名为'Timestamp'的索引。如果需要,可以使用'df.index'或'df.reset_index()。columns' –

+0

如何获得'day'?我尝试过'df.index.day',但它似乎返回一个数组。 – KcFnMi