如何使用 python 的数据表按日期过滤
How to filter by date with python's datatable
我有以下数据表,我想按大于“2019-01-01”的日期对其进行过滤。问题是日期是字符串。
dt_dates = dt.Frame({"days_date": ['2019-01-01','2019-01-02','2019-01-03']})
这是我最好的尝试。
dt_dates[f.days_date > datetime.strptime(f.days_date, "2019-01-01")]
这个returns错误
TypeError: strptime() argument 1 must be str, not Expr
在 python 的数据表中筛选日期的最佳方法是什么?
参考
您的日期时间语法不正确,无法将字符串转换为日期时间。
您要找的是:
dt_dates[f.days_date > datetime.strptime(f.days_date, "%Y-%m-%d")]
strptime 的第二个参数是日期格式。
但是,让我们退后一步,因为这不是正确的方法。
首先,我们应该将 Frame 中的所有日期转换为日期时间。老实说,我从未使用过数据表,但语法看起来与熊猫的 Dataframe 非常相似。
在数据框中,我们可以执行以下操作:
df_date = df_date['days_date'].apply(lambda x: datetime.strptime(x, '%Y-%m'%d))
这会遍历列为“dates_date”的每一行,并将每个字符串转换为日期时间。
从那里,我们可以使用过滤器来获取相关行:
df_date = df_date[df_date['days_date'] > datetime.strptime("2019-01-01", "%Y-%m-%d")]
datatable version 1.0.0 引入了对日期时间数据类型的本机支持。注意这两种方式初始化数据的区别:
dt_dates = dt.Frame({"days_date": ['2019-01-01','2019-01-02','2019-01-03']})
dt_dates.stypes
> (stype.str32,)
和
dt_dates = dt.Frame({"days_date": ['2019-01-01','2019-01-02','2019-01-03']}, stype="date32")
dt_dates.stypes
> (stype.date32,)
后一帧包含表示日历日期的 days_date 类型 datatable.Type.date32 列。然后可以按日期筛选如下:
split_date = datetime.datetime.strptime("2019-01-01", "%Y-%m-%d")
dt_split_date = dt.time.ymd(split_date.year, split_date.month, split_date.day)
dt_dates[dt.f.days_date > dt_split_date, :]
我有以下数据表,我想按大于“2019-01-01”的日期对其进行过滤。问题是日期是字符串。
dt_dates = dt.Frame({"days_date": ['2019-01-01','2019-01-02','2019-01-03']})
这是我最好的尝试。
dt_dates[f.days_date > datetime.strptime(f.days_date, "2019-01-01")]
这个returns错误
TypeError: strptime() argument 1 must be str, not Expr
在 python 的数据表中筛选日期的最佳方法是什么?
参考
您的日期时间语法不正确,无法将字符串转换为日期时间。
您要找的是:
dt_dates[f.days_date > datetime.strptime(f.days_date, "%Y-%m-%d")]
strptime 的第二个参数是日期格式。
但是,让我们退后一步,因为这不是正确的方法。
首先,我们应该将 Frame 中的所有日期转换为日期时间。老实说,我从未使用过数据表,但语法看起来与熊猫的 Dataframe 非常相似。
在数据框中,我们可以执行以下操作:
df_date = df_date['days_date'].apply(lambda x: datetime.strptime(x, '%Y-%m'%d))
这会遍历列为“dates_date”的每一行,并将每个字符串转换为日期时间。
从那里,我们可以使用过滤器来获取相关行:
df_date = df_date[df_date['days_date'] > datetime.strptime("2019-01-01", "%Y-%m-%d")]
datatable version 1.0.0 引入了对日期时间数据类型的本机支持。注意这两种方式初始化数据的区别:
dt_dates = dt.Frame({"days_date": ['2019-01-01','2019-01-02','2019-01-03']})
dt_dates.stypes
> (stype.str32,)
和
dt_dates = dt.Frame({"days_date": ['2019-01-01','2019-01-02','2019-01-03']}, stype="date32")
dt_dates.stypes
> (stype.date32,)
后一帧包含表示日历日期的 days_date 类型 datatable.Type.date32 列。然后可以按日期筛选如下:
split_date = datetime.datetime.strptime("2019-01-01", "%Y-%m-%d")
dt_split_date = dt.time.ymd(split_date.year, split_date.month, split_date.day)
dt_dates[dt.f.days_date > dt_split_date, :]