我有一个数据框,我使用pd.read_sql_query()从SQL中提取数据。我有一个列有日期但是以excel通用数字格式。如何将此列转换为datetime对象。
我可以使用xlrd库转换一个值,但是寻找转换整个列的最佳方法。 datetime_value = datetime(* xlrd.xldate_as_tuple(42369,0))
答案 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
这是你在找什么?
<强>更新强>
要使用字符串条目进行此操作,您可以告诉Pandas将列视为整数或浮点数:
# 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或在lambda函数中浮动:
# 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)))