Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何获取熊猫中给定日期时间范围的数据?_Python 3.x_Pandas - Fatal编程技术网

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感谢您指出这一点!