Python 3.x 如何获取熊猫中给定日期时间范围的数据?
我在下面有一个数据集Python 3.x 如何获取熊猫中给定日期时间范围的数据?,python-3.x,pandas,Python 3.x,Pandas,我在下面有一个数据集 2018-02-11 17:09:47.211344+05:30,, 2018-02-11 17:10:13.553385+05:30,, 2018-02-11 17:30:13.58636+05:30,, 2018-02-11 18:00:13.630383+05:30,, 2018-02-11 18:30:13.558238+05:30,, 2018-02-12 03:50:19.298678+05:30,, 2018-02-12 04:53:17.187277+05:
2018-02-11 17:09:47.211344+05:30,,
2018-02-11 17:10:13.553385+05:30,,
2018-02-11 17:30:13.58636+05:30,,
2018-02-11 18:00:13.630383+05:30,,
2018-02-11 18:30:13.558238+05:30,,
2018-02-12 03:50:19.298678+05:30,,
2018-02-12 04:53:17.187277+05:30,,
2018-02-12 05:10:25.443962+05:30,,
2018-02-12 05:20:21.591291+05:30,,
2018-02-13 06:41:54.234258+05:30,,
2018-02-17 07:04:10.662735+05:30,,
2018-02-20 05:34:39.855528+05:30,,
我想在两个特定日期之间选择一组条目,例如在2018-02-11
和2018-02-17
之间。现在我遵循这个stackoverflow问题,它似乎有效,只是没有返回指定范围内的所有条目。这是我按照答案中的建议所做的
import pandas as pd
import numpy as np
df = pd.read_csv("file.csv", header=None,
names=["date", "entry", "exit"], parse_dates=["date"])
df.set_index("date", inplace=True)
#df = df.set_index(['date'])
df.fillna(0, inplace=True)
print(df.loc['2018-02-11': '2018-02-17'])
这是下面的结果
entry exit
date
2018-02-11 11:39:47.211344 0.0 0.0
2018-02-11 11:40:13.553385 0.0 0.0
2018-02-11 12:00:13.586360 0.0 0.0
2018-02-11 12:30:13.630383 0.0 0.0
2018-02-11 13:00:13.558238 0.0 0.0
2018-02-11 22:20:19.298678 0.0 0.0
2018-02-11 23:23:17.187277 0.0 0.0
2018-02-11 23:40:25.443962 0.0 0.0
2018-02-11 23:50:21.591291 0.0 0.0
2018-02-13 01:11:54.234258 0.0 0.0
2018-02-17 01:34:10.662735 0.0 0.0
如您所见,我没有获得2018-02-12日期的条目。为什么它要忽略这个
我甚至尝试了另一种方法
print(df[(df.index > '2018-02-11') & (df.index <= '2018-02-17')])
print(df[(df.index>'2018-02-11')&(df.index您的输入文件在每个日期时间字符串的末尾有一个时区偏移量+05:30
。Pandas在导入时会自动应用该偏移量,但会生成时区原始的日期时间对象
一种修复方法(如果您确实需要时区感知日期时间…)是本地化为UTC,然后通过转换为带有该偏移量的时区重新应用+05:30偏移量,例如Asia/Kolkata
:
df = df.tz_localize('UTC').tz_convert('Asia/Kolkata')
df.loc['2018-02-11': '2018-02-17']
v1 v2
date
2018-02-11 17:09:47.211344+05:30 0.0 0.0
2018-02-11 17:10:13.553385+05:30 0.0 0.0
2018-02-11 17:30:13.586360+05:30 0.0 0.0
2018-02-11 18:00:13.630383+05:30 0.0 0.0
2018-02-11 18:30:13.558238+05:30 0.0 0.0
2018-02-12 03:50:19.298678+05:30 0.0 0.0
2018-02-12 04:53:17.187277+05:30 0.0 0.0
2018-02-12 05:10:25.443962+05:30 0.0 0.0
2018-02-12 05:20:21.591291+05:30 0.0 0.0
2018-02-13 06:41:54.234258+05:30 0.0 0.0
2018-02-17 07:04:10.662735+05:30 0.0 0.0
没有遗漏。日期是四舍五入的。行数说明了一切。是你的+05:30
将你的整个2018-02-12
移回2018-02-11
查看你在结果df中的第一个日期2018-02-11 11:39:47.211344
。添加+5:30
,你会得到2018-02-11 17:09:47.211344
,您的原始行。2018-02-12
的所有日期都转换为2018-02-11
,因为+5:30
不计入结果。在要点中,代码按预期工作。您必须正确解释结果。@piRSquared感谢您指出这一点!