在 python 的数据表框架中将字符串列转换为日期格式
Converting string column to date format in datatable frame in python
举个简单的例子:
import datatable as dt
import pandas as pd
from datetime import datetime
d_t = dt.Frame(pd.DataFrame({"Date": ["04/05/2020", "04/06/2020"]}))
只有一个名为 Date 的列有两个 str32 类型的值。
如何将日期列转换为数据表框架中的日期格式。
我试过了
dates_list = [datetime.strptime(date, "%m/%d/%Y") for date in d_t["Date"].to_list()[0]]
d_t[:,"NewDate"] = dt.Frame(dates_list)
d_t["NewDate"].max()
# The code can run successfully so far.
但是结果是这样的:
NewDate
▪▪▪▪▪▪▪▪
0 NA
我认为它仍然不是日期格式。
即使我查了每一列的类型,我仍然不知道:
d_t.stypes
[Out]: (stype.str32, stype.obj64)
有什么办法可以解决这个问题吗?
感谢您的回答。
datatable 1.0 introduced new column types datatable.Type.date32
and datatable.Type.time64
.
在这种情况下,从字符串列 Date
到 date32
类型的转换如下:
d_t[:, dt.update(Date_date =
dt.time.ymd(dt.as_type(dt.str.slice(dt.f.Date, 6, 10), int),
dt.as_type(dt.str.slice(dt.f.Date, 3, 5), int),
dt.as_type(dt.str.slice(dt.f.Date, 0, 2), int)))]
d_t
Date Date_date
▪▪▪▪ ▪▪▪▪
0 04/05/2020 2020-05-04
1 04/06/2020 2020-06-04
虽然有点冗长,但它在数据表内执行所有操作,没有中间列表或 pandas 帧的开销和惩罚。希望未来的版本会在 datatable.time.ymd()
之外添加更多功能,以简化此类转换操作。
如果您选择 ISO 8601 standard 来表示日期(即 %Y-%m-%d
格式的字符串),那么转换为 date32
会简单得多:
d_t = dt.Frame({"Date": ["2020-04-05", "2020-04-06"]})
d_t[0] = dt.Type.date32
d_t.stypes
> (stype.date32,)
举个简单的例子:
import datatable as dt
import pandas as pd
from datetime import datetime
d_t = dt.Frame(pd.DataFrame({"Date": ["04/05/2020", "04/06/2020"]}))
只有一个名为 Date 的列有两个 str32 类型的值。
如何将日期列转换为数据表框架中的日期格式。
我试过了
dates_list = [datetime.strptime(date, "%m/%d/%Y") for date in d_t["Date"].to_list()[0]]
d_t[:,"NewDate"] = dt.Frame(dates_list)
d_t["NewDate"].max()
# The code can run successfully so far.
但是结果是这样的:
NewDate
▪▪▪▪▪▪▪▪
0 NA
我认为它仍然不是日期格式。
即使我查了每一列的类型,我仍然不知道:
d_t.stypes
[Out]: (stype.str32, stype.obj64)
有什么办法可以解决这个问题吗?
感谢您的回答。
datatable 1.0 introduced new column types datatable.Type.date32
and datatable.Type.time64
.
在这种情况下,从字符串列 Date
到 date32
类型的转换如下:
d_t[:, dt.update(Date_date =
dt.time.ymd(dt.as_type(dt.str.slice(dt.f.Date, 6, 10), int),
dt.as_type(dt.str.slice(dt.f.Date, 3, 5), int),
dt.as_type(dt.str.slice(dt.f.Date, 0, 2), int)))]
d_t
Date Date_date
▪▪▪▪ ▪▪▪▪
0 04/05/2020 2020-05-04
1 04/06/2020 2020-06-04
虽然有点冗长,但它在数据表内执行所有操作,没有中间列表或 pandas 帧的开销和惩罚。希望未来的版本会在 datatable.time.ymd()
之外添加更多功能,以简化此类转换操作。
如果您选择 ISO 8601 standard 来表示日期(即 %Y-%m-%d
格式的字符串),那么转换为 date32
会简单得多:
d_t = dt.Frame({"Date": ["2020-04-05", "2020-04-06"]})
d_t[0] = dt.Type.date32
d_t.stypes
> (stype.date32,)