2014-12-13 83 views
2

我有一個熊貓數據框。將兩個日期時間連接到一個字符串日期範圍

Data = pd.DataFrame([[datetime.datetime(2014,1,1),datetime.datetime(2014,1,3)]],columns=['date1','date2') 

該數據幀有兩個日期時間列date1和date2。

我想創建一個包含如下格式的字符串新列:

'1/1/2014 - 1/3/2014' 

現在我有這樣的設置來創建新的列,但它一直尾隨HMS

Data['range'] = Data.apply(lambda x:'%s - %s' % (x['date1'],x['date2']),axis=1) 

因爲我正在處理兩列而不是兩個值,所以很難僅刪除日期。任何指針?

+0

數據的例子是有用的。你怎麼看「找到它」?你會得到任何錯誤或不正確的結果?任何例子都是有用的。 – Marcin 2014-12-13 06:29:28

+0

通過「查找它很難」我的意思是在x ['datex']上的strptime不起作用,因爲這些是系列而不是值,我不能將它應用於x中的「lambda x」或使用%Y% M%d而不是%s。一個例子是date1 = datetime.datetime(2014,1,1)和date2 = datetime.datetime(2014,1,3)。 – Chris 2014-12-13 06:32:46

回答

1

發現很難大道僅有的日期了,因爲我有兩列,而不是兩個值

好工作,因爲你已經在使用apply,你正在處理有兩個值(不列),所以你可以調用每個date方法:

Data.apply(
    lambda x: '%s - %s' % (xdate1.date() , x.date2.date()), 
    axis=1) 

x傳遞給您的lambda函數的是您的數據框的單行,因此訪問x.date1(或x['date1'])會給出類型爲Timestamp的單個值。很容易從中提取日期。

+0

油滑。不知道.date()函數,所以這可能會對我有很大的幫助。謝謝一堆! – Chris 2014-12-13 07:07:38

1

我認爲這應該幫助:

import pandas as pd 
from datetime import datetime 

Data = pd.DataFrame([[datetime(2014,1,1), 
         datetime(2014,1,3)]], 
         columns=['date1','date2']) 

# 
Data['range'] = Data.apply(lambda x:'%s - %s' % 
          (x['date1'].to_pydatetime().strftime("%d/%m/%Y"), 
           x['date2'].to_pydatetime().strftime("%d/%m/%y")), 
          axis=1)  

print(Data)  

結果是:

 date1  date2 
0 2014-01-01 2014-01-03 
     date1  date2     range 
0 2014-01-01 2014-01-03 01/01/2014 - 03/01/14 
+0

這很好,但另一個答案是更簡潔一點。感謝您的幫助! – Chris 2014-12-13 07:06:53

相關問題