如何获取pandas中给定日期时间范围的数据?

时间:2018-04-12 16:43:37

标签: 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: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-112018-02-17之间的条目。现在我按照此stackoverflow问题Select dataframe rows between two dates进行操作,但它似乎无效#39; t返回指定范围的所有条目。这就是我在答案

中所做的
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')])

但我仍然得到相同的结果。那出了什么问题?

1 个答案:

答案 0 :(得分:1)

您的输入文件在每个日期时间字符串末尾的时区偏移量为+05:30。 Pandas会在导入时自动应用该偏移量,但会产生时区天真的日期时间对象。

一个修复(如果您确实需要时区感知日期时间......)是本地化为UTC,然后通过转换为携带该偏移的时区重新应用+05:30偏移,例如{{1} }:

Asia/Kolkata