当前位置: 首页 > 知识库问答 >
问题:

从Pandas DataFrame中选择两个日期之间的所有数据[重复]

曹景铄
2023-03-14

我有数据帧,其中有一列包含事件日期(日期不是唯一的)。我需要选择此时间段内的所有数据。我接下来尝试:

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)]

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

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

共有1个答案

景德海
2023-03-14

我使用了以下测试数据帧:

   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

如你所见:

    < Li > 2019年的日期已被删除。 < li >输出仅包含一月份的日期,直到最后。 < li >二月初的日期也被删除。

在你的电脑上重复我的例子。也许你的问题的根源(结果dous不包含一月份的所有日期)在别的地方?

 类似资料:
  • 问题内容: 我正在使用数据库存储日志,其中“日期”列保存了插入日期。日期的格式为“ MM / DD / YY”。请任何人建议我如何在两个特定日期之间选择数据。例如,我尝试了这个: 但是我想这行不通,因为日期不是数字。谢谢您的帮助!:) 问题答案: 使用关键字:

  • 问题内容: 我正在寻找创建一条选择语句,该语句将每小时在@minDateTime和@maxDateTime之间返回,如下所示(没有可供选择的表。我不在寻找where子句!): 问题答案: 试试这个。使用。 在上面的查询中,a的基本记录由之前的第一个sql查询派生。查询结果为您提供。 重复执行第二个查询以获取结果。此过程 将继续进行,直到Dates少于。

  • 问题内容: 我已将用户注册的日期保存为日期时间,例如 2011-12-06 10:45:36 。我已运行此查询,并且希望此项目 -2011-12-06 10: 45 : 36- 将被选择: 但是不是。存在任何优雅的方式,该如何选择?我最初的想法是,但是看起来不太好。 问题答案: 您的问题是日期的简短版本使用午夜作为默认设置。因此,您的查询实际上是: 这就是为什么您看不到10:45的记录的原因。 更

  • 问题内容: 我有这个查询,我需要选择两个日期之间的所有记录,mysql表是datetime格式。 我试过了,但是没有用。 问题答案: 尝试以下方法:

  • 如何向MaterialDatePicker添加约束以强制用户选择仅介于两个日期之间的日期?

  • 问题内容: 预期输入: 预期产量: 问题答案: 您还可以查看DatePeriod类: 这应该使您具有DateTime对象的数组。 进行迭代