2016-04-21 78 views
0

我有從使用pd.read_sql_query()從SQL中提取數據構建的數據框。我有一列有日期,但以excel通用數字格式。如何將此列轉換爲日期時間對象。將包含Excel常規數字的pandas數據框列轉換爲datetime對象

我可以轉換一個值與xlrd庫,但尋找轉換整個列的最佳方式。 datetime_value =日期時間(* xlrd.xldate_as_tuple(42369,0))

回答

0

您可以使用map來執行該操作的lambda函數適用於一列中的每個條目:

import pandas as pd 
import xlrd 
from datetime import datetime 

# Create dummy dataframe 
df = pd.DataFrame({ 
    "date": [42369, 42370, 42371, 42372] 
    }) 
print df.to_string() 

# Convert values into a new column named "converted" 
df["converted"] = df["date"].map(lambda x: datetime(*xlrd.xldate_as_tuple(x, 0))) 
print df.to_string() 

轉換前:

date 
0 42369 
1 42370 
2 42371 
3 42372 

後:

date converted 
0 42369 2015-12-31 
1 42370 2016-01-01 
2 42371 2016-01-02 
3 42372 2016-01-03 

這是你在找什麼?

更新:

爲了與字符串項這項工作,你既可以說熊貓對待列整數和浮點數:

# int 
df["converted"] = df["date"].astype(int).map(lambda x: datetime(*xlrd.xldate_as_tuple(x, 0))) 
# float 
df["converted"] = df["date"].astype(float).map(lambda x: datetime(*xlrd.xldate_as_tuple(x, 0))) 

或只投x爲int或內浮動拉姆達函數:

# int 
df["converted"] = df["date"].map(lambda x: datetime(*xlrd.xldate_as_tuple(int(x), 0))) 
# float 
df["converted"] = df["date"].map(lambda x: datetime(*xlrd.xldate_as_tuple(float(x), 0))) 
+0

謝謝,這就是我正在尋找但我的dataframe列存儲爲字符串。如何將列轉換爲整數或浮點數 – Obabs

+0

@Obabs,請參閱我的更新答案 – Plasma

相關問題