将包含Excel常规数字的pandas dataframe列转换为datetime对象

时间:2016-04-21 15:54:41

标签: excel datetime pandas dataframe

我有一个数据框,我使用pd.read_sql_query()从SQL中提取数据。我有一个列有日期但是以excel通用数字格式。如何将此列转换为datetime对象。

我可以使用xlrd库转换一个值,但是寻找转换整个列的最佳方法。 datetime_value = datetime(* xlrd.xldate_as_tuple(42369,0))

1 个答案:

答案 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)))