从日期范围中删除几个日期

Posted

技术标签:

【中文标题】从日期范围中删除几个日期【英文标题】:remove few dates from date range 【发布时间】:2019-12-13 22:39:54 【问题描述】:
from datetime import timedelta, date

def daterange(date1, date2):
    for n in range(int ((date2 - date1).days)+1):
        yield date1 + timedelta(n)

start_dt = date(2015, 12, 20)
end_dt = date(2016, 1, 11)
for dt in daterange(start_dt, end_dt):
    print(dt.strftime("%Y-%m-%d"))

我有如上所述的日期范围,但在这个日期范围内我几乎没有可以忽略的日期。这些日期在数据框中。

如何从这个日期范围中取出这些日期?任何人请建议。具有不同日期的数据框如下。

Pardata = spark.read.parquet("/mnt/Test/data.parquet")
Pardata.createOrReplaceTempView("parfile")
ParRes = spark.sql("SELECT distinct date FROM parfile  ")

【问题讨论】:

只是一个建议:尝试使用普通的 Python 结构来执行此操作。这对 Pyspark 来说不是一个好的用例。我们在谈论多少个日期?从公元第一年到现在,我们仍然在讨论 ± 740k 日期,这可以通过标准 Python 有效处理。 【参考方案1】:

使用left_anti加入:

dates = [[dt.strftime("%Y-%m-%d")] for dt in daterange(start_dt, end_dt)]
dates_df = spark.createDataFrame(dates, ["date"])

dates_df.join(ParRes, dates_df("date") === ParRes("date"), "left_anti").show()

首先,根据该日期范围创建一个 DataFrame dates_df。然后使用left_antijoin,根据date这个key,过滤掉dates_dfDataframe中ParResDataframe中的日期。

【讨论】:

以上是关于从日期范围中删除几个日期的主要内容,如果未能解决你的问题,请参考以下文章

如果日期在给定范围内,则从每个组中删除行

从具有特定日期范围的 SAS 数据集中删除行

如何在某个日期范围内从表存储中删除记录?

按日期范围删除数据框中的行。

如何从linkedin中找到日期范围的xpath

HTML:输入类型日期和月份范围