2014-03-14 12 views
4

我正在導入電子表格中的一些數據。這是在一個數據幀,但日期是在一個數字表示或格式將日期(excel格式)的數字表示轉換爲python日期和時間,然後將它們拆分爲兩個單獨的數據幀列在pandas中

41516.43 

首先,我想將其轉換爲日期和時間對象

date_val = 30/08/2013 10:13:26 AM 

然後我想分裂date_val進入日期和時間分開,並將它們放置在單獨列在我的數據幀(DF)

| **original date** | **date**  | **time** | 
41516.43    30/08/2013  10:13:26 AM 
+0

這是什麼數字格式? –

+0

在Excel中的日期(作爲短日期),但後來我刪除了所有的格式。從整個電子表格中讀取,使其更容易閱讀。所以簡而言之,一個Excel日期格式? – yoshiserry

+0

此頁面顯示日期時間序列號是格式..沒有更多的細節。 http://office.microsoft.com/en-au/excel-help/available-number-formats-HA102749055.aspx – yoshiserry

回答

4

another question在一起湊合:

In [11]: s = pd.Series([41516.43]) 

In [12]: from xlrd.xldate import xldate_as_tuple 

In [13]: from datetime import datetime 

In [14]: s.apply(lambda x: datetime(*xldate_as_tuple(x, 0))) 
Out[14]: 
0 2013-08-30 10:19:12 
dtype: datetime64[ns] 

注意:可能略有不同是由於您給予的浮動四捨五入。

"bare-knuckle no-seat-belts use-at-own-risk"版本:

In [21]: pd.Timestamp('1899-12-30') + (pd.offsets.Day(1).nanos * s).astype(np.timedelta64) 
Out[21]: 
0 2013-08-30 10:19:12 
dtype: datetime64[ns] 

我認爲這是一般最好做分析的日期,而使用read_excel

+0

謝謝你。你介意嘗試解釋什麼是LAMDA,以及它是如何工作的。我一直在看,但不知道它在做什麼。它基本上是把3行代碼變成1嗎?你還可以用沒有拉姆達的另一種方式寫你的拉姆達聲明嗎? – yoshiserry

+0

另外@ Andy Hayden,爲什麼你必須首先將浮點數轉換爲一系列?\ – yoshiserry

+0

@yoshiserry DataFrame中的一列是系列。 Lambda如果是內聯方式的一個函數。 –

相關問題