Mak*_*nov 5 python dataframe pandas
我有 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)]
Run Code Online (Sandbox Code Playgroud)
列的类型Transaction_date是datetime64[ns]。当我运行请求时间01/01/2020为 to的代码时31/01/2020- 指定时间段的部分数据丢失(信息仅显示 21 天,应该是 31 天)。
我看到数据帧包含整个请求期间的数据。你能帮我吗,我的错误在哪里?
我使用了以下测试数据框:
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
Run Code Online (Sandbox Code Playgroud)
开始/结束日期为:
start_day = '01.01.2020'
end_day = '31.01.2020'
Run Code Online (Sandbox Code Playgroud)
代码是:
# Convert start / end dates to datetime
start_day = pd.to_datetime(start_day)
end_day = pd.to_datetime(end_day)
Run Code Online (Sandbox Code Playgroud)
我注意到您使用日期时间模块,我认为这是一个不好的做法。为此,请使用专用的pandasonic函数(to_datetime)。它甚至足够聪明,可以识别许多常用的日期格式,因此无需您自己指定它。
要获得实际结果,请运行:
df[df['Transaction_date'].between(start_day, end_day)]
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的:
在您的计算机上重复我的示例。也许问题的根源(结果不包含一月的所有日期)在其他地方?
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |