Pandas:从 Pandas DataFrame 中选择两个日期之间的所有数据

Posted

技术标签:

【中文标题】Pandas:从 Pandas DataFrame 中选择两个日期之间的所有数据【英文标题】:Pandas: Select all data from Pandas DataFrame between two dates 【发布时间】:2020-06-11 23:24:08 【问题描述】:

我有 DataFrame,其中有一列包含事件日期(日期不是唯一的)。我需要选择此期间的所有数据。我下一个试试:

start_day = datetime.date(datetime.strptime(start_day, '%d.%m.%Y')) #change user data to date format

end_day = datetime.date(datetime.strptime(end_day, '%d.%m.%Y'))

df = df[df['Transaction_date'].between(start_day, end_day)]

Transaction_date 的类型是datetime64[ns]。 当我以01/01/202031/01/2020 期间的请求运行代码时 - 指定期间的部分数据丢失(信息仅显示 21 天,应该是 31 天)。

我看到数据框包含整个请求期间的数据。 你能帮我吗,我的错误在哪里?

【问题讨论】:

你能显示print(df[~df['Transaction_date'].between(start_day, end_day)].shape) 的输出吗(在你的代码之后添加) 这能回答你的问题吗? Filtering Pandas DataFrames on dates 在此之后: print(df[~df['Transaction_date'].between(start_day, end_day)].shape) 我得到下一个输出:(0,12) 【参考方案1】:

我使用了以下测试DataFrame:

   Transaction_date  Value
0        2019-12-31     10
1        2020-01-10     10
2        2020-01-15     10
3        2020-01-20     10
4        2020-01-25     10
5        2020-01-28     10
6        2020-01-29     10
7        2020-01-30     10
8        2020-01-31     10
9        2020-02-01     10
10       2020-02-01     10

开始/结束日期是:

start_day = '01.01.2020'
end_day = '31.01.2020'

代码是:

# Convert start / end dates to datetime
start_day = pd.to_datetime(start_day)
end_day = pd.to_datetime(end_day)

我注意到您使用 datetime 模块,我认为这是一种不好的做法。 为此,请使用专用的 pandasonic 函数 (to_datetime)。 它甚至足够聪明,可以识别许多常用的日期格式, 所以不需要自己指定。

要获得实际结果,请运行:

df[df['Transaction_date'].between(start_day, end_day)]

结果是:

  Transaction_date  Value
1       2020-01-10     10
2       2020-01-15     10
3       2020-01-20     10
4       2020-01-25     10
5       2020-01-28     10
6       2020-01-29     10
7       2020-01-30     10
8       2020-01-31     10

如你所见:

2019 的日期已删除。 输出仅包含一月份的日期,直到最后。 2 月初的日期也已删除。

在您的计算机上重复我的示例。也许你的问题的根源 (结果不包含一月份的所有日期)在某个地方 还有吗?

【讨论】:

谢谢你的回答,真的帮了我。在您的支持下,我在源数据中发现了一个错误——“Transaction_date”列中的日期格式不同。我认为这正是我的问题。

以上是关于Pandas:从 Pandas DataFrame 中选择两个日期之间的所有数据的主要内容,如果未能解决你的问题,请参考以下文章

从 pandas DataFrame 制作热图

Pandas:从 DataFrame 分配 MultiIndex 列

从 pandas 返回多个值适用于 DataFrame

从 Pandas Dataframe 错误创建 Spark DataFrame

pandas如何设置索引从0开始,pandas如何恢复默认索引,DataFrame如何恢复隐式索引

从 pandas.DataFrame 中选择复杂的标准