2016-12-16 50 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