熊猫:选择两个日期之间的熊猫数据框架中的所有数据

时间:2020-02-27 21:14:40

标签: python pandas dataframe

我有一个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天)。

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

1 个答案:

答案 0 :(得分:3)

我使用了以下测试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月初开始的日期也已删除。

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